什么是ApacheKafka中的分区领导者?

hgqdbh6s  于 2021-06-04  发布在  Kafka
关注(0)|答案(4)|浏览(530)

Kafka的领导人是自己,还是中间人?我最初的理解是,它们是充当读/写代理的分区,然后将它们的值分配给isr。
然而,最近我听到他们提到好像他们发生在“经纪人”的水平,因此我的困惑。
我知道还有其他的帖子是为了回答这个问题,但是那里的答案没有帮助。

2nbm6dog

2nbm6dog1#

热释光;博士
Kafka的领导人是自己,还是中间人?
分区领导人是Kafka的经纪人。
分区引线
这一点在Kafka的文件中有明确提到:
每个分区都有一个充当“领导者”的服务器和零个或多个充当“追随者”的服务器。leader处理分区的所有读写请求,而followers则被动地复制leader。如果领导者失败,其中一个追随者将自动成为新的领导者。每台服务器都充当其部分分区的引导者和其他分区的跟随者,因此集群内的负载平衡良好。
因此,分区负责人实际上是服务于此目的的代理,负责此特定分区的所有读写请求。
分区领导人选举
为特定分区分配一个领导者是在一个称为分区领导者选举的过程中发生的。当主题/分区被创建时,或者分区负责人(即代理)由于任何原因不可用时,就会发生此过程。
此外,您可以使用首选副本引线选择工具强制首选副本选择:
通过复制,每个分区可以有多个副本。分区的副本列表称为“已分配副本”。此列表中的第一个副本是“首选副本”。在创建主题/分区时,kafka确保跨主题的分区的“首选副本”在集群中的代理之间平均分布。在理想情况下,给定分区的前导应该是“首选副本”。这保证了集群中代理的领导负载是均衡的。但是,随着时间的推移,由于代理关闭(由受控关闭、崩溃、机器故障等引起),领导负载可能会变得不平衡。此工具有助于恢复集群中代理之间的领导平衡。
为此,必须运行以下命令:

bin/kafka-preferred-replica-election.sh --zookeeper localhost:12913/kafka --path-to-json-file topicPartitionList.json

其中的内容 topicPartitionList.json 应该如下所示:

{
 "partitions":
  [
    {"topic": "topic1", "partition": 0},
    {"topic": "topic1", "partition": 1},
    {"topic": "topic1", "partition": 2},
    {"topic": "topic2", "partition": 0},
    {"topic": "topic2", "partition": 1}
  ]
}

如何找到哪个代理充当分区负责人
为了找到哪个代理充当分区引导程序,哪个代理充当同步副本(isr),您必须运行以下命令:

kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic myTopic

输出应与下面的相同:

Topic:myTopic       PartitionCount:4        ReplicationFactor:1     Configs:
    Topic: myTopic      Partition: 0    Leader: 2       Replicas: 2     Isr: 2
    Topic: myTopic      Partition: 1    Leader: 3       Replicas: 3     Isr: 3
    Topic: myTopic      Partition: 2    Leader: 4       Replicas: 4     Isr: 4
    Topic: myTopic      Partition: 3    Leader: 0       Replicas: 0     Isr: 0
wgeznvg7

wgeznvg72#

kafka中的所有主题分区都有一个leader,如果复制因子大于1,则leader有follower。可以使用以下命令检查分区引线:

bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic myTopic --describe

在该命令的输出中,分区引线的代理ID显示为 leader: xx

zpf6vheq

zpf6vheq3#

当kafka主题的--replication factor大于1(这也意味着我们的集群必须有大于或等于replication factor的代理计数)时,分区领导者概念就起作用了。
在这种情况下,当生产者将任何消息推送到主题的分区时,请求首先到达分区的前导(在kafka集群上存在的所有复制分区中)。它存储消息并首先在其他跟随者分区上复制消息,然后向生产者发送消息确认。
仅在完成上述过程后,特定消息将可供消费者使用。
我推荐官方链接以获得更多了解。

nqwrtyyt

nqwrtyyt4#

这里有些答案不是绝对正确的,所以我想说得更清楚一些。
每个分区正好有一个分区负责人,负责处理该分区的所有读/写请求。
如果复制因子大于1,则额外的分区复制将充当分区跟随器。
kafka保证每个分区副本都驻留在不同的代理上(不管它是引导者还是跟随者),因此最大复制因子是代理数。
每个分区跟随者都在读取来自分区领导者的消息(就像一种使用者一样),并且不服务于该分区的任何使用者(只有分区领导者服务于读/写)。
如果分区跟随器保持从分区引导器读取数据而不滞后,并且不丢失与zookeeper的连接,则认为分区跟随器是同步的(最大滞后默认值为10秒,zookeeper超时值为6,两者都是可配置的)。
如果分区跟随器落后,则认为它不同步。
当一个分区领导者由于任何原因关闭(实际上它所在的代理关闭)时,它的一个同步分区追随者将成为新的领导者。
Kafka文档中的复制部分详细解释了这一点。
confluent也写了一篇关于这个主题的博客。

相关问题