就像另一个答案所说的,一个主题不是属于某个特定的节点,也不是为某个特定的节点创建的,而是为集群创建的。每当创建主题时,分区都会在集群节点之间进行划分。每个分区都有一个前导节点和副本节点。生产者写入leader节点,kafka在内部复制副本节点上的数据。使用者使用来自其前导节点的分区数据。 为了更好地理解/可视化kafka中的主题分区分布,您可以使用kafdrop之类的工具,您可以按照repo for setup的readme部分中的步骤进行操作。你可以从这里下载最新的二进制文件。在ui中,您可以看到主题的每个分区的leader和replica节点。 设置非常简单,我个人觉得这个工具非常有用!
2条答案
按热度按时间c0vxltue1#
实际上,您并没有在kakfa集群中的一个特定节点中创建主题。当您发出创建主题的请求时,分区将自动分布在属于集群的所有节点上,副本也将分布。这就是kafka处理高可用性的方式。如果其中一个节点关闭,则其他一些节点拥有所有所需的数据,因此不会出现停机或对集群用户造成影响。
你可以开一张支票
--describe
命令如下:这将为您的主题提供一个分区列表,它们位于何处,哪个节点是该分区的主导节点(当用户需要来自该分区的数据时,会告诉他们从哪个节点消费),以及一些其他信息,如同步副本状态(in-sync replica status)或isr,以及复制因子。
Kafka官方文档中有更多信息。
请记住,当您的客户连接到
bootstrap-server
它没有指定从中读取数据的代理的完整列表。它只是指定一个(或多个)代理,从中获取有关集群的信息。当客户机从给定的主题和分区进行读/写操作时,该操作将直接执行到保存该数据的相关代理(不管引导中指定的特定代理)。你可以在这里和这里看到更多关于这个过程的信息。dgtucam12#
就像另一个答案所说的,一个主题不是属于某个特定的节点,也不是为某个特定的节点创建的,而是为集群创建的。每当创建主题时,分区都会在集群节点之间进行划分。每个分区都有一个前导节点和副本节点。生产者写入leader节点,kafka在内部复制副本节点上的数据。使用者使用来自其前导节点的分区数据。
为了更好地理解/可视化kafka中的主题分区分布,您可以使用kafdrop之类的工具,您可以按照repo for setup的readme部分中的步骤进行操作。你可以从这里下载最新的二进制文件。在ui中,您可以看到主题的每个分区的leader和replica节点。
设置非常简单,我个人觉得这个工具非常有用!