zoukankan      html  css  js  c++  java
  • 记一次线上升级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。

    处理结果:

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

  • 相关阅读:
    627. whose 和 who's
    628. why 和why not
    629 will: 各种用法tyg
    enChapter 3 Underlying Technologiesp
    使用VIEWER.JS进行简单的图片预览
    outlook2010设置失败后重新设置
    新增和编辑clob字段
    金钱大写
    pivot 与 unpivot 函数是SQL05新提供的2个函数
    从函数到委托
  • 原文地址:https://www.cnblogs.com/gxyandwmm/p/13393776.html
Copyright © 2011-2022 走看看