集群中有多少个KAFKA控制器,以及控制器的目的是什么



kafka群集中的kafka控制器负责管理分区领导者和复制。

如果Kafka群集中有100个经纪人,控制器只有一个Kafka经纪人吗?因此,在100个经纪人中,控制器是领导者吗?

您怎么知道哪个经纪人是控制器?

KAFKA控制器的管理对Kafka系统管理至关重要吗?

控制器是Kafka Brokers之一,也负责该任务选举分区领导者(除了通常的经纪功能(。

控制器只是一个经纪人吗?

一次只有1个控制器。

进行内部,每个经纪人都试图在Zookeeper(/Controller(中创建短暂节点。第一个成功,成为控制器。其他只是得到适当的例外("节点已经存在"(,然后在控制器节点上观看。当控制器死亡时,删除了短暂的节点,并通知了观看经纪人。同样,其中第一个成功注册了短暂节点,成为新控制器,其他控制器将再次获得"已经存在"的例外并继续等待。

您如何知道Kafka中的控制器是谁?

当选举新控制器时,它将获得Zookeeper的"控制器时期"号。经纪人知道当前的控制器时期,如果他们从具有较旧数字的控制器那里收到一条消息,他们就会忽略它。

控制器是领导者?

不是真的..每个分区都有自己的领导者。当经纪人死亡时,控制器会跨越需要新领导者的所有分区,确定新领导者应该是谁(仅在Sync Replica列表中的随机副本aka ISRS iSRS (并向所有包含新领导者或现有关注者的经纪人发送请求。

新领导者现在知道他们需要开始为生产者和消费者的请求来自客户的要求,而关注者现在知道他们需要开始从新领导者那里复制。

在Kafka集群中负责分区和复制品的状态管理的主动控制器。因此,在您的情况下,如果您有一个带有100个经纪人的集群,其中一个将充当控制器。

可以在此处找到有关集群控制器职责的更多详细信息。

为了找到哪个经纪人是首先需要通过ZK CLI连接到Zookeeper的群集的控制器:

./bin/zkCli.sh -server localhost:2181 

然后get控制器

[zk: localhost:2181(CONNECTED) 0] get /controller

输出应像下面的输出:

{"version":1,"brokerid":100,"timestamp":"1506423376977"}
cZxid = 0x191
ctime = Tue Sep 26 12:56:16 CEST 2017
mZxid = 0x191
mtime = Tue Sep 26 12:56:16 CEST 2017
pZxid = 0x191
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x15ebdd241840002
dataLength = 56
numChildren = 0

Zookeeper是Kafka群集状态的存储。它是在一开始或当前控制器崩溃时用于控制器选举的。当主题的分区负责人经纪人失败/崩溃时,控制器还负责告诉其他复制品成为分区负责人。

kafka控制器是kafka群集的大脑。它监视经纪人的活泼,并涉及经纪人的失败。

集群中只有一个KAFKA控制器。控制器是集群中的Kafka经纪人之一,除了常规的经纪功能外,每当现有经纪人离开群集或经纪人加入集群时,还负责选举分区负责人。

。 。

通过创建一个称为"/controller"的短暂节点,将在集群中开始的第一个经纪人成为Kafka控制器。在Zookeeper中。当其他经纪人启动时,他们还尝试在Zookeeper中创建此节点,但会收到" Node"已存在。例外,他们了解群集中已经有一个控制器。

当Zookeeper未从控制器中接收心跳消息时,Zookeeper中的短暂节点将被删除。然后,它通知群集中的所有其他经纪人,控制器通过Zookeeper Watcher已经消失了,该宣传器再次为新控制器启动了新的选举。所有其他经纪人将再次尝试创建一个短暂的节点"/controller"。第一个成功的人将当选为新控制器。

可能在集群中拥有多个控制器。考虑一种情况,在当前的KAFKA控制器上发生了长GC(垃圾收集((Controller_1&quort;Zookeeper在配置的时间内没有从控制器中收到心跳消息。这会导致"/控制器"。从Zookeeper中删除的节点和集群的另一家经纪人被选为新控制器(" Controller_2"(。

在这种情况下,我们有2个控制器" controller_1"。和"控制器_2"在集群中。&quot" controler_1"GC已经完成,它可能尝试在Zookeeper中编写/更新状态。"控制器"还将尝试在Zookeeper中编写/更新状态,这可能导致Kafka群集与旧控制器和新控制器的写入不一致。

为了避免它,一个新的"时代"每次发生控制器选举时都会生成。每次选出控制器时,它都会通过Zookeeper条件增量操作接收

随之而来的是,当旧控制器(" controller_1"(尝试更新某些东西时,Zookeeper将当前时期与旧控制器在其写入/更新请求中发送的较旧的时代进行了比较,并且简单地忽略了它。集群中的所有其他经纪人也知道当前的控制器时期,如果他们从旧控制器中收到旧时代的消息,他们也会忽略它。

最新更新