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

Apache kafka ApacheKafka中的分区领导者是什么?,apache-kafka,broker,kafka-topic,leader,kafka-partition,Apache Kafka,Broker,Kafka Topic,Leader,Kafka Partition,卡夫卡领导人是自己还是经纪人? 我最初的理解是,它们是充当读/写代理的分区,然后将它们的价值转移给ISR 然而,最近我听到有人提到它们,好像它们发生在“经纪人”级别,因此我感到困惑 我知道还有其他帖子想回答这个问题,但答案没有帮助。卡夫卡的所有主题分区都有一个引导者,如果复制因子大于1,则引导者有跟随者。可以使用以下命令检查分区引线: bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic myTopic --describe

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

然而,最近我听到有人提到它们,好像它们发生在“经纪人”级别,因此我感到困惑


我知道还有其他帖子想回答这个问题,但答案没有帮助。

卡夫卡的所有主题分区都有一个引导者,如果复制因子大于1,则引导者有跟随者。可以使用以下命令检查分区引线:

bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic myTopic --describe
bin/kafka-preferred-replica-election.sh --zookeeper localhost:12913/kafka --path-to-json-file topicPartitionList.json
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic myTopic

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

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

bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic myTopic --describe
bin/kafka-preferred-replica-election.sh --zookeeper localhost:12913/kafka --path-to-json-file topicPartitionList.json
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic myTopic

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

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

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

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

本手册对此进行了详细说明。

Confluent也写了一篇关于这个话题的好文章。

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

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

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

本手册对此进行了详细说明。
Confluent也写了一篇关于这个话题的好文章。

tl;dr

卡夫卡领导人是自己还是经纪人

分区负责人是卡夫卡经纪人


分区引线

这一点在以下章节中明确提到:

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

因此,分区负责人实际上是服务于此目的的代理,负责此特定分区的所有读写请求


分区领导人选举

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

此外,您可以使用以下命令强制选择首选副本:

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

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

bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic myTopic --describe
bin/kafka-preferred-replica-election.sh --zookeeper localhost:12913/kafka --path-to-json-file topicPartitionList.json
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic myTopic
其中,
topicPartitionList.json
的内容应如下所示:

{
 "partitions":
  [
    {"topic": "topic1", "partition": 0},
    {"topic": "topic1", "partition": 1},
    {"topic": "topic1", "partition": 2},
    {"topic": "topic2", "partition": 0},
    {"topic": "topic2", "partition": 1}
  ]
}
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

如何找到作为代理的经纪人