首页 > 其他分享 >某个broker节点未启动造成无法选举leader

某个broker节点未启动造成无法选举leader

时间:2022-10-24 22:35:41浏览次数:40  
标签:leader Replicas -- Isr Partition broker Leader topic 节点


问题描述:topic都是多分区,多副本,broker节点关闭后,由于某些情况,某个节点无法启动,其他节点都启动后,topic或部分分区仍不可用,造成无法选举leader

1. 创建topic

topic:topic-demo02 3分区,3副本

[xuhaixing@xhx151 cluster]$ kafka-topics.sh --zookeeper 192.168.94.151:2181/kafkaCluster --create --topic topic-demo02 --replication-factor 3 --partitions 3
Created topic topic-demo02.
[xuhaixing@xhx151 cluster]$ kafka-topics.sh --zookeeper 192.168.94.151:2181/kafkaCluster --describe --topic topic-demo02
Topic: topic-demo02 PartitionCount: 3 ReplicationFactor: 3 Configs:
Topic: topic-demo02 Partition: 0 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1
Topic: topic-demo02 Partition: 1 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2
Topic: topic-demo02 Partition: 2 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3

2. 停掉三个broker

[xuhaixing@xhx151 cluster]$ kafka-topics.sh --zookeeper 192.168.94.151:2181/kafkaCluster --describe --topic topic-demo02
Topic: topic-demo02 PartitionCount: 3 ReplicationFactor: 3 Configs:
Topic: topic-demo02 Partition: 0 Leader: 1 Replicas: 2,3,1 Isr: 1
Topic: topic-demo02 Partition: 1 Leader: 1 Replicas: 3,1,2 Isr: 1
Topic: topic-demo02 Partition: 2 Leader: 1 Replicas: 1,2,3 Isr: 1

此时Leader与ISR集合并不是空,而是1。因为zookeeper中存储的信息是kafka节点维护的,随着最后一个kafka节点的宕机,没有kafka节点更新zookeeper中的信息,故保持不变。

3. 启动broker.id 为2,3的节点

[xuhaixing@xhx151 cluster]$ kafka-topics.sh --zookeeper 192.168.94.151:2181/kafkaCluster --describe --topic topic-demo02
Topic: topic-demo02 PartitionCount: 3 ReplicationFactor: 3 Configs: unclean.leader.election.enable=false
Topic: topic-demo02 Partition: 0 Leader: none Replicas: 2,3,1 Isr: 1
Topic: topic-demo02 Partition: 1 Leader: none Replicas: 3,1,2 Isr: 1
Topic: topic-demo02 Partition: 2 Leader: none Replicas: 1,2,3 Isr: 1

此时Leader为null,Isr依旧为未启动的broker节点,三个节点,恢复两个节点,此topic目前还是不可用状态。

部分分区不可用复现

1.创建如下topic

[xuhaixing@xhx151 cluster]$ kafka-topics.sh --zookeeper 192.168.94.151:2181/kafkaCluster --describe --topic topic-demo03
Topic: topic-demo03 PartitionCount: 3 ReplicationFactor: 2 Configs:
Topic: topic-demo03 Partition: 0 Leader: 3 Replicas: 3,1 Isr: 3,1
Topic: topic-demo03 Partition: 1 Leader: 1 Replicas: 1,2 Isr: 1,2
Topic: topic-demo03 Partition: 2 Leader: 2 Replicas: 2,3 Isr: 2,3

2.停掉3个broker节点

3.启动broker.id=2的节点

[xuhaixing@xhx151 bin]$ kafka-topics.sh --zookeeper 192.168.94.151:2181/kafkaCluster --describe --topic topic-demo03
Topic: topic-demo03 PartitionCount: 3 ReplicationFactor: 2 Configs:
Topic: topic-demo03 Partition: 0 Leader: none Replicas: 3,1 Isr: 3
Topic: topic-demo03 Partition: 1 Leader: 2 Replicas: 1,2 Isr: 2
Topic: topic-demo03 Partition: 2 Leader: 2 Replicas: 2,3 Isr: 2

此时分区0,Leader变成了none, Isr变成了3

4.启动broker.id=1的节点

再次查看状态

[xuhaixing@xhx151 bin]$ kafka-topics.sh --zookeeper 192.168.94.151:2181/kafkaCluster --describe --topic topic-demo03
Topic: topic-demo03 PartitionCount: 3 ReplicationFactor: 2 Configs:
Topic: topic-demo03 Partition: 0 Leader: none Replicas: 3,1 Isr: 3
Topic: topic-demo03 Partition: 1 Leader: 1 Replicas: 1,2 Isr: 2,1
Topic: topic-demo03 Partition: 2 Leader: 2 Replicas: 2,3 Isr: 2

分区0依旧不可用

原因分析

这跟broker端的一个配置项有关 ​​unclean.leader.election.enable​​,该参数决定是否从非ISR集合中选举leader。因怕非ISR节点集合数据延迟较大丢数据,所以默认为false。

因此,若kafka broker全部停机后,某topic的leader节点未启动,该topic依旧不可用

官方文档解释:

unclean.leader.election.enable
Indicates whether to enable replicas not in the ISR set to be elected as leader as a last resort, even though doing so may result in data loss.

Type: boolean
Default: false
Valid Values:
Server Default Property: unclean.leader.election.enable
Importance: medium

解决方案

1.修改所有broker配置文件:​​unclean.leader.election.enable=true​​,重启

2.动态修改broker配置,不用重启

[xuhaixing@xhx151 cluster]$ kafka-configs.sh --bootstrap-server 192.168.94.151:9094 --entity-type brokers --entity-name 2 --add-config unclean.leader.election.enable=true  --alter
Completed updating config for broker 2.

可以再用​​--delete-config​​删除配置

[xuhaixing@xhx151 cluster]$ kafka-configs.sh --bootstrap-server 192.168.94.151:9094 --entity-type brokers --entity-name 2 --delete-config unclean.leader.election.enable  --alter
Completed updating config for broker 2.

3.修改topic配置参数

[xuhaixing@xhx151 cluster]$ kafka-configs.sh --bootstrap-server 192.168.94.151:9093 --entity-type topics --entity-name topic-demo02  --add-config unclean.leader.election.enable=true  --alter
Completed updating config for

选举成功

[xuhaixing@xhx151 bin]$ kafka-topics.sh --zookeeper 192.168.94.151:2181/kafkaCluster --describe --topic topic-demo02
Topic: topic-demo02 PartitionCount: 3 ReplicationFactor: 3 Configs: unclean.leader.election.enable=true
Topic: topic-demo02 Partition: 0 Leader: 1 Replicas: 2,3,1 Isr: 1
Topic: topic-demo02 Partition: 1 Leader: 1 Replicas: 3,1,2 Isr: 1
Topic: topic-demo02 Partition: 2 Leader: 1 Replicas: 1,2,3 Isr: 1

再删除配置

[xuhaixing@xhx151 cluster]$ kafka-configs.sh --bootstrap-server 192.168.94.151:9093 --entity-type topics --entity-name topic-demo02  --delete-config unclean.leader.election.enable  --alter
Completed updating config for

更多优质内容,请关注公众号:程序员星星

某个broker节点未启动造成无法选举leader_kafka


标签:leader,Replicas,--,Isr,Partition,broker,Leader,topic,节点
From: https://blog.51cto.com/u_7841967/5791479

相关文章

  • 完全二叉树的节点数
    222.完全二叉树的节点个数中文语境和英文语境似乎有点区别,我们说的完全二叉树对应英文CompleteBinaryTree,没有问题。但是我们说的满二叉树对应英文PerfectBinaryTr......
  • 6.5 Kafka集群之Leader选举
    1.Broker选举(1).不采用多数投票方式选举的原因kafka并没有采用多数投票来选举leader的(redis和es采用的是多数投票方式来进行选举的),原因有两个,一是防止选举时选举到了数......
  • RabbitMQ.Client.Exceptions.BrokerUnreachableException:“None of the specified en
    RabbitMQ和程序运行在同一台电脑上可以使用guest账号访问如果不在同一台电脑,就会报错RabbitMQ.Client.Exceptions.BrokerUnreachableException:“Noneofthespecified......
  • 动力节点——day03
    接收键盘的输入:1.创建一个键盘扫描器对象java.util.Scanners=newScanner(System.in);2.接收用户输入s.nextInt();静态变量在类加载的时候就分配内存了,实例变量在对象......
  • 单链表插入和删除一个节点的伪代码算法
    插入设ai-1节点为pai+1节点为q插入节点为t则p-->t-->next=q-->next删除设ai-1节点为pai+1节点为q删除的字节为tp-->next=t-->nextfree(t)参考链接https://bl......
  • Kubernetes--Pod节点选择器nodeSelector(标签)
    Pod节点选择器是标签及标签选择器的一种应用,它能够让Pod对象基于集群中工作节点的标签来挑选倾向运行的目标节点。Kubernetes的kube-scheduler守护进程负责在各工作节点......
  • 参考图中删除节点的链表,写出单链表插入和删除一个节点的伪代码算法。 节点包含数据dat
    单链表的插入:定义列表a=[a1,a2......ai-1,ai+1......an-1,an]cym-1-->节点p,cym+1-->节点q(此时p->next=q)设插入元素cym为节点xx->next=p->nextp->next=x单链表......
  • 所有节点安装flannel插件4
    所有节点安装flannel插件4k8s是大规模的使用容器有的容器是在node1上启动的,有的容器是在node2上启动的,有的容器是在node3上启动的;容器和容器之间需要相互通信。相互通讯......
  • weblogic洞若观火第5篇之手工操作管理节点
    引言上一篇文章,主要讲解:weblogic的手工创建域。在本篇文章中,我们接着介绍:weblogic的手工操作管理节点AdministrationServer。管理节点AdministrationServer管理服务器是......
  • k8s基础篇 pod(六)节点选择器
    6.node节点选择器我们在创建pod资源的时候,pod会根据schduler进行调度,那么默认会调度到随机的一个工作节点,如果我们想要pod调度到指定节点或者调度到一些具有相同特点的node......