我有3个经纪人的集群。我使用的主题配置了3个和4个分区的复制因子。我使用Kafka python API来设置生产者和消费者。
我的问题是,当我停止其中一个代理时,在某些情况下,我的消费者停止接收消息。
(When broker 1 is unavailable):
Topic: frogakas Partition: 0 Leader: 5 Replicas: 5,3,1 Isr: 5,3
Topic: frogakas Partition: 1 Leader: 3 Replicas: 3,1,5 Isr: 3,5
Topic: frogakas Partition: 2 Leader: 5 Replicas: 1,5,3 Isr: 5,3
Topic: frogakas Partition: 3 Leader: 5 Replicas: 5,1,3 Isr: 5,3
问题是,当我关闭任何一家经纪人时,一些消费者群体就会消失。我的所有消费者共享相同的组ID,因此,他们停止工作,因为他们的组不在组列表中。
当所有代理都可用时,这些是组:
root@m3-virtual-machine:/opt/kafka/bin# ./kafka-consumer-groups.sh --list --bootstrap-server localhost:9092
test_group_kas
test_group_1
test_group_2
test_group
当代理1不可用时,仅显示test_group_2:
root@m3-virtual-machine:/opt/kafka/bin# ./kafka-consumer-groups.sh --list --bootstrap-server localhost:9092
test_group_2
此时,如果我启动一个groupId为test_group_2的消费者,消息将被正确接收。
我想知道当经纪人福尔斯时,是否有任何方法可以避免服务中断。
2条答案
按热度按时间pdkcd3nj1#
默认情况下,Kafka以
offsets.topic.replication.factor=1
开头如果关闭托管偏移主题的代理,消费者组管理将无法工作。
列出的组可能是您配置zookeeper而不是引导服务器的错误。
0md85ypi2#
如果Kafka集群中的代理出现故障,它可能会导致服务中断,原因是分区复制因子下降和副本不可用。为了避免这种情况,一个选项是增加复制因子,以确保即使在失败的情况下也有足够的副本可用。此外,代理之间的自动负载平衡可以帮助避免特定代理的过载。同样重要的是,确保消费者和生产者被正确配置,以处理代理和分区故障。Kafka可以提供状态信息,以便消费者和生产者可以调整他们的行为以响应失败事件。