7

kafka领导者是自己分区还是经纪人?我最初的理解是它们是充当读/写代理的分区,然后将它们的价值传递给 ISR。

但是最近我听到他们提到它们,好像它们发生在“经纪人”级别,因此我感到困惑。

我知道还有其他帖子旨在回答这个问题,但那里的答案没有帮助。

4

4 回答 4

15

这里的一些答案不是绝对正确的,所以我想让它更清楚。

每个分区都有一个分区领导者,负责处理该分区的所有读/写请求。
如果复制因子大于 1,则额外的分区复制充当分区追随者。
Kafka 保证每个分区副本都驻留在不同的代理上(无论是领导者还是跟随者),因此最大复制因子是代理数量。

每个分区追随者都从分区领导者那里读取消息(就像一种消费者)并且不为该分区的任何消费者提供服务(只有分区领导者提供读/写服务)。
如果分区跟随者一直从分区领导者读取数据而不会落后并且不会丢失与 ZooKeeper 的连接(最大延迟默认为 10 秒,ZooKeeper 超时为 6,它们都是可配置的),则认为它是同步的。
如果分区追随者落后,则认为它不同步。
当分区领导者因任何原因关闭时(实际上是它所在的代理关闭),其中一个同步的分区追随者将成为新的领导者。

Kafka 文档中的复制部分对此进行了详细说明。Confluent 还写了一篇关于这个主题
的不错的博客。

于 2020-03-24T18:33:36.437 回答
7

tl;博士

kafka领导者是自己分区还是经纪人?

分区领导者是Kafka Broker


分区领导

Kafka Docs中明确提到了这一点:

每个分区都有一个充当“领导者”的服务器和零个或多个充当“跟随者”的服务器。领导者处理分区的所有读写请求,而追随者被动地复制领导者。如果领导者失败,其中一个追随者将自动成为新的领导者。每个服务器充当其某些分区的领导者和其他分区的追随者,因此负载在集群内得到很好的平衡。

因此,分区领导者实际上是服务于这个目的的代理,负责这个特定分区的所有读写请求。


分区领导选举

特定分区的领导者分配发生在称为分区领导者选举的过程中。当创建主题/分区或分区领导者(即代理)因任何原因不可用时,会发生此过程。

此外,您可以使用Preferred Replica Leader Election Tool强制进行首选副本选举:

使用复制,每个分区可以有多个副本。分区的副本列表称为“分配的副本”。此列表中的第一个副本是“首选副本”。创建主题/分区时,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
于 2020-03-24T19:28:01.730 回答
1

当 Kafka 主题的 --replication-factor 大于 1(这也意味着我们的集群必须具有大于或等于复制因子的代理数)时,分区领导者概念有效。

在这种情况下,当生产者将任何消息推送到主题的分区时,请求首先到达分区的领导者(在 Kafka 集群上存在的所有复制分区中)。它存储消息并首先将消息复制到其他追随者分区上,然后将消息确认发送给生产者。

仅在完成上述过程后,特定消息将可供消费者使用。

我推荐官方链接以获得更多理解。

于 2020-08-31T17:10:04.757 回答
0

Kafka 中的所有主题分区都有一个领导者,如果复制因子大于 1,则领导者有追随者。可以使用以下命令检查分区领导者:

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

在此命令的输出中,分区领导者的代理 ID 显示为leader: xx

于 2020-03-24T17:48:56.220 回答