Apache Kafka 中的分区领导者是什么?

Mat*_*att 5 leader broker apache-kafka kafka-topic kafka-partition

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

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

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

Ofe*_*Hod 10

这里的一些答案并不完全正确,所以我想说得更清楚。

每个分区恰好有一个分区领导者来处理该分区的所有读/写请求。
如果复制因子大于 1,则附加分区复制将充当分区跟随者。
Kafka保证每个分区副本都驻留在不同的broker上(无论是leader还是follower),所以最大复制因子是broker数。

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

Kafka 文档中复制部分详细解释了这一点。
Confluent 还写了一篇关于这个主题的不错的博客

  • 我检查了文档,你是完全正确的,他们说:“如果生产者请求不太严格的确认,那么即使同步副本的数量低于最小值,也可以提交和使用消息(例如,它可以低至仅领导者)。我删除了有关最小同步副本的最后一部分。我认为添加有关此问题的更多信息和 acks 参数与这个问题无关。如果您认为我应该添加解释,请告诉我! (2认同)

Gio*_*ous 9

太长了;博士

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

分区领导者是Kafka Broker


分区领导者

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

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

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


分区领导者选举

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

此外,您可以使用首选副本领导者选举工具强制首选副本选举:

通过复制,每个分区可以有多个副本。分区的副本列表称为“分配的副本”。该列表中的第一个副本是“首选副本”。创建主题/分区时,Kafka 确保跨主题的分区的“首选副本”在集群中的代理之间均匀分布。在理想情况下,给定分区的领导者应该是“首选副本”。这保证了集群中代理之间的领导负载均衡。然而,随着时间的推移,由于代理关闭(由受控关闭、崩溃、机器故障等引起),领导负载可能会变得不平衡。该工具有助于恢复集群中代理之间的领导平衡。

为此,您必须运行以下命令:

bin/kafka-preferred-replica-election.sh --zookeeper localhost:12913/kafka --path-to-json-file topicPartitionList.json
Run Code Online (Sandbox Code Playgroud)

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

{
 "partitions":
  [
    {"topic": "topic1", "partition": 0},
    {"topic": "topic1", "partition": 1},
    {"topic": "topic1", "partition": 2},
    {"topic": "topic2", "partition": 0},
    {"topic": "topic2", "partition": 1}
  ]
}
Run Code Online (Sandbox Code Playgroud)

如何找到哪个broker充当分区领导者

为了找到哪个代理充当分区领导者以及哪个代理充当同步副本 (ISR),您必须运行以下命令:

kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic myTopic
Run Code Online (Sandbox Code Playgroud)

并且输出应与以下内容相同:

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
Run Code Online (Sandbox Code Playgroud)


H.Ç*_*Ç.T 0

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

bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic myTopic --describe
Run Code Online (Sandbox Code Playgroud)

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