美文网首页
kafka使用经验

kafka使用经验

作者: 知而乐者 | 来源:发表于2020-03-15 01:42 被阅读0次
  • 当consumer重平衡时,可能导致重复消费,如:consumer1拉取了100数据,当消费过程中服务停掉,就会重平衡导致重复消费,所以多台应用在重新部署应用的时候可能导致重复消费,解决方法,使用钩子:
// 判断是否已经关闭
        AtomicBoolean isRunning = new AtomicBoolean(true);
        Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    isRunning.compareAndSet(true, false);
                    shutdownLatch.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }));
        while (isRunning.get()) {
        //执行代码
        //
            consumer.commitSync();
        }
        shutdownLatch.countDown();
}
  • 重平衡的时候如果一个consumer正在处理拉取的数据,那么其他consumer会等consumer执行的时候才会重平衡完成(只有执行poll方法的时候才会触发重平衡,发送sendJoinGroupRequest的请求),其他consumer等待超过一定时间后会忽略这个consumer(默认是5分钟)

  • 一个topic每个分区在两个broker都有副本,那么一台broker挂掉后不会对消费者有任何影响,组协调器会自动迁到正常的borker中
    如:kakfa集群有2个broker,topic test100有两个分区,每个分区有两个副本,此时消费者组中有三个消费者(有一个会订阅不到任何分区),消费者拉取了一批消息正在消费,此时如果broker中任意一台挂掉,不会对消费者有任何影响,各个消费则消费的分区页不会改变,消费成功后提交位移也是正常的

  • 如果,两台broker有一台挂掉后,topic无法正常消费,可能是topic副本为1,或者__consumer_offsets主题的副本为1

相关文章

网友评论

      本文标题:kafka使用经验

      本文链接:https://www.haomeiwen.com/subject/cmfoshtx.html