记一次线上升级openresty中kafka版本产生的多版本兼容问题
时间:2022-07-22
本文章向大家介绍记一次线上升级openresty中kafka版本产生的多版本兼容问题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1、最近项目规划升级kafka版本,从之前的0.11版本升级最新版本的2.4.1;升级过过程遇到了坑,特此记录一下。
背景:
项目中的有两个不同业务数据处理方式,一个是核心数据,一个用户的非核心数据,由于非核心数据的量巨大,所以项目中打算使用两个kafka集群来处理,非核心数据继续使用之前的kafka集群;
其目的就是防止非核心数据在量过大的情况影响kafka的稳定性,进而影响核心数据处理业务。
项目中的flink处理没问题,但是在openresty的使用过程中遇到了问题。
出现的现象如下:
1、openresty中使用了两个不同端口的kafka集群;
2、在核心数据的kafka收到数据的时候,对应的新集群可以收到,但是非核心数据并没有发到对应的老集群,而是发到了新集群,由于新集群没有手动创建topic,报了找不到topic的异常;
3、非核心数据先发数据,可以发到对应的老kafka集群,但是核心数据没有发到新集群,而是继续发到了老集群。
问题分析:
根据现象分析,可以推测,两个不同的kafka集群配置openresty中,只生效了一个,第一个初始化成功的生效了,但是openresty肯定是可以支持不同集群配置。
根据问题定位,查看openresty引用的kafka中的开源代码,代码如下:
同时openresty的代码中使用的new方式为:
local bp = producer:new(broker_list, { producer_type = "async" })
从这里看可以一目了然了,原来在初始话的时候,未使用第三个参数,导致后边的kafka返回的时候,还是返回第一次创建生成的默认kafka。导致只有一个生效。
处理措施:
local bp = producer:new(broker_list, { producer_type = "async" }, "kafka2.4.1")
local bp = producer:new(broker_list, { producer_type = "async" }, "kafka0.1.1")
针对使用的不同的集群,给集群初始化不同的 cluster_name。
处理结果:
发布部署后,问题解决,两个不同的集群可以同时接收不同的上报数据。
- 欧盟推出“数字经济税收制度”优化了税收制度,却影响区块链行业
- CSS魔法堂:你一定误解过的Normal flow
- ASP.NET输出JSON格式数据
- haproxy 新手上路
- 区块链是如何保护交易隐私的?eprint这篇论文告诉你答案
- gradle项目中资源文件的相对路径打包处理技巧
- Markdown 语法手册 (完整整理版)
- WordPress3.5安装出现的几个问题
- java并发编程学习: 原子变量(CAS)
- gradle项目中如何支持java与scala混合使用?
- 开始使用Linux
- .Net魔法堂:开启IIS的WebGarden、WebFarm和StateServer之旅
- java中的tuple实现
- MYSQL5.7开启慢查询日志
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法