kafka集群两个broker,kill掉一台后,consumer收不到消息

风中之神 发表于: 2018-08-31   最后更新时间: 2018-09-01 00:50:47   8,110 游览

两个broker节点A(10.7.24.201)和B(10.7.21.240)
A主机上部署了zookeeper+kafka
B主机上部署了zookeeper+kafka+logstash

A和B都启动的前提下,通过命令:

bin/kafka-console-producer.sh --topic panda --broker-list 10.7.24.201:9092,10.7.21.240:9092

logstash能收到消息

kill掉240,发消息,logstash也能收到消息
但是如果保留240 kill掉201,logstash就报错:

[2018-08-31T18:13:07,119][WARN ][org.apache.kafka.clients.NetworkClient] [Consumer clientId=chen-3, groupId=logstash] Connection to node 0 could not be established. Broker may not be available.
[2018-08-31T18:13:07,216][WARN ][org.apache.kafka.clients.NetworkClient] [Consumer clientId=chen-4, groupId=logstash] Connection to node 0 could not be established. Broker may not be available.

执行如下命令:

bin/kafka-consumer-groups.sh  --describe --bootstrap-server 10.7.24.201:9092,10.7.21.240:9092  --group logstash

报错如下:

Note: This will not show information about old Zookeeper-based consumers.
[2018-08-31 18:14:15,459] WARN Connection to node -1 could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
[2018-08-31 18:14:15,537] WARN Connection to node -1 could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
Error: Executing consumer group command failed due to The consumer group command timed out while waiting for group to initialize:

不知道什么原因,求解答。。。。。

发表于 2018-08-31

kafka0.9版本以后,consumer消费的offset默认保存到kafka系统topic中,所以你这种很可能是因为保存offset的topic只有一个副本。
你可以通过命令查看topic有没有副本,命令如下:

bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic __consumer_offsets

这个是存储offset的主题,如果副本只有1个,那么就会导致集群挂掉一个,你消费者再也不消费的情况。把该主题增加副本就行了。
https://www.orchome.com/454 命令大全里面,执行增加副本。

风中之神 -> 半兽人 5年前

非常感谢,问题确实解决了!
修改server.properties 如下:

############################# Internal Topic Settings  #############################
# The replication factor for the group metadata internal topics "__consumer_offsets" and "__transaction_state"
# For anything other than development testing, a value greater than 1 is recommended for to ensure availability such as 3.
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=3

不管是重启还是新建topic,topic的副本依然是一个,似乎只能按照您提供的方式和命令去修改topic的副本数量。。。。
有点迷惑。。。。

半兽人 -> 风中之神 5年前

https://www.orchome.com/472
这里找下,有修改默认分区数和副本数的。

一 .以json文件的形式,来进行添加:

1、查看 主题的信息

bin/kafka-topics.sh --describe --zookeeper 127.0.0.1:2181  --topic myTopic1

确定分区数

2、可以指定分区绑定副本(前提是副本id的broker服务要启动了) 到bin目录下,添加文件 increase-replication-factor.json

[root@localhost bin]# vim increase-replication-factor.json

{"version": 1, "partitions": [
        {
            "topic": "AA_topic",
            "partition": 0,
            "replicas": [
                4,
                5
            ]
        },
        {
            "topic": "AA_topic",
            "partition": 1,
            "replicas": [
                4,
                5
            ]
        }
    ]
}

其中 replicas 填写的值,就是 kafka 的对应的broker.id 【在kafka的conf目录的 server.properties 文件里能找到】。

3、执行命令

[root@localhost bin]# ./kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file increase-replication-factor.json --execute

4、再看主题的信息

bin/kafka-topics.sh --describe --zookeeper 127.0.0.1:2181  --topic AA_topic

我这边操作记录,试下能不能帮你解决问题

问题同:
https://www.orchome.com/805
引用自 solo 答复 原野 
“要在zk里面把__consumer_offsets节点和下面的所有节点都删掉,再重新启动集群做消费”

八面佛 -> 风中之神 5年前

我也与到同样的问题,部署了三台,kill 其中一台,consumer收不到消息,按照:

offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=3

修改后,问题依然。
请问是否还要修改其他配置,谢谢

八面佛 -> 八面佛 5年前

感谢 “半兽人” ,按照 提供的方法 解决了这个问题

開開新新 -> 半兽人 3年前

我三个broker,要保证topic高可用,除了副本设置3个,还有什么可以加的参数?

./kafka-topics.sh --create --zookeeper localhost:2181 --partitions 3 --replication-factor 3

假如我3个broker,给5个分区 5个副本 这样会是怎么样的一个情况? 会存在这种操作吗?

半兽人 -> 開開新新 3年前

没有什么需要特别注意的了,剩下一个是broker恢复策略(优先保障恢复,还是优先保障数据完整性)
另外,副本数无法超过broker数。

開開新新 -> 半兽人 3年前

我主要用作消息中间件,加acks之类的合适吗

半兽人 -> 開開新新 3年前

acks?什么意思

開開新新 -> 半兽人 3年前

producer sets acks to "all"

開開新新 -> 半兽人 3年前

我刚才测试了一下 副本不能大于broker数量,另外你提到的broker恢复策略是什么?

半兽人 -> 開開新新 3年前

那个是生产数据安全级别,根据你需要配置吧

你的答案

查看kafka相关的其他问题或提一个您自己的问题