kafka ZookeeperConsumerConnector 异常排查

来源:互联网 发布:java字符转数字 编辑:程序博客网 时间:2024/06/05 14:46
  1. 在写kafka消费者时,用spring容器启动的bean,该bean监听ApplicationListener事件。
  2. 在onApplicationEvent事件监听到后,consumer.createMessageStreams 。
  3. 在启动应用的时候,发现有错误异常,异常信息如下:
    kafka.common.MessageStreamsExistException: ZookeeperConsumerConnector can create message streams at most once
  4. 问题排查,初步断定是kafka消费者重复create连接,导致zookeeper返回错误异常。
    此时做了一个flag判断,如果监听过,就不监听。重新打包发布后,异常信息没有,则证明该bean 重复监听了onApplicationEvent

  5. 具体原因是由于应用中使用了springMVC框架,导致root container和springMVC 的container都发送了onApplicationEvent。

  6. 解决办法,有2种
    1)加flag,如果监听过一次,在进入就退出
    2)只接受一个容器的监听事件,比如选择root 的事件,代码如下
public void onApplicationEvent(ContextRefreshedEvent event) {        if(event.getApplicationContext().getParent() == null){            consuming();        }    }

7.看了这篇博文,当spring 容器初始化完成后执行某个方法,知道使用springMVC框架时,springMVC有一个自子容器的。

0 0
原创粉丝点击