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。

 

处理结果:

发布部署后,问题解决,两个不同的集群可以同时接收不同的上报数据。

 

posted on 2020-07-28 20:49  小勇DW3  阅读(392)  评论(0编辑  收藏  举报