关于Kafka其中一个Broker挂掉后,生产者正常,消费者无法消费的问题

您所在的位置:网站首页 consul集群部署如果其中一台挂了会怎么样 关于Kafka其中一个Broker挂掉后,生产者正常,消费者无法消费的问题

关于Kafka其中一个Broker挂掉后,生产者正常,消费者无法消费的问题

2023-07-15 23:35| 来源: 网络整理| 查看: 265

昨晚运维同事报告,生产集群的kafka写数据正常,但是下游消费数据全都出错。

当时核查发现,是因为broker0因为内存溢出(待核查,感觉应该是ulimit的问题)后宕了。其他broker正常,当时很奇怪,所有topic都做了副本,按理应该挂掉一个broker应该能正常消费啊。

由于影响生产,赶紧把broker0重启了。后来发现下游所有消费者都从earliest消费(我们的程序也是设置的earliest,这样即使出问题,也不会丢数据),但是按理这个设置仅当首次消费时生效,后续重启程序,都会继续从断点消费。

今天核查,从网上找到了根本原因,原文链接如下: kafka高可用失败问题

根本原因是:__consumer_offsets只有1个副本,所有的分区都在broker0上,所以当broker0宕机,消费者异常。 至于__consumer_offsets为什么只有一个副本,应该是搭建kafka时,在配置文件里属性offsets.topic.replication.factor=1。所以__consumer_offsets会被建为1个副本。

但是原文解决方法可能受限于版本问题,需要做删除zookeeper操作。但是我这是生产集群啊,可不能这么干。还好我之前有在线增加topic副本的经验,这里分享一下:

动态修改副本数 查看当前topic分区及副本情况 ./kafka-topics.sh --describe --zookeeper localhost:2181 --topic __consumer_offsets 编辑json文件(addReplicas.json) # partition是分区ID,replicas内数组元素即对应3个broker id { "partitions":[ {"topic":"__consumer_offsets","partition": 0,"replicas":[0,2,4]} ,{"topic":"__consumer_offsets","partition": 1,"replicas":[0,2,4]} ,{"topic":"__consumer_offsets","partition": 2,"replicas":[0,2,4]} ,{"topic":"__consumer_offsets","partition": 3,"replicas":[0,2,4]} ......50个分区,这里不再赘述 ]} 执行json文件。该指令实际上是异步执行的,提交成功后不代表副本增加完成。 $KAFKA_HOME/bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file addReplicas.json --execute 查看副本增加进展 $KAFKA_HOME/bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file addReplicas.json --verify # 也可以通过第1步的查看topic分区副本情况来看

建议没搞过的小伙伴,可以先在测试环境,或者新建一个topic,测试没问题后,再修改__consumer_offsets的副本



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3