关于Kafka其中一个Broker挂掉后,生产者正常,消费者无法消费的问题 |
您所在的位置:网站首页 › consul集群部署如果其中一台挂了会怎么样 › 关于Kafka其中一个Broker挂掉后,生产者正常,消费者无法消费的问题 |
昨晚运维同事报告,生产集群的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 |