kafka分区可以分布在多个kafka集群节点上吗?

mjqavswn  于 2021-06-04  发布在  Kafka
关注(0)|答案(2)|浏览(1174)

我的应用程序有一个在spring.kafka.bootstrap-servers属性中指定的kafka集群节点列表,并侦听所有这些节点上的主题。
如果我要在其中一个节点上创建一个主题,假设有5个分区,那么这些分区将分布在这些多个节点上还是在单个节点上创建?另外,如何找出主题分区实际存在于哪个节点上?

c0vxltue

c0vxltue1#

实际上,您并没有在kakfa集群中的一个特定节点中创建主题。当您发出创建主题的请求时,分区将自动分布在属于集群的所有节点上,副本也将分布。这就是kafka处理高可用性的方式。如果其中一个节点关闭,则其他一些节点拥有所有所需的数据,因此不会出现停机或对集群用户造成影响。
你可以开一张支票 --describe 命令如下:

> bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic my-replicated-topic

    Topic:my-replicated-topic   PartitionCount:1    ReplicationFactor:3 Configs:
        Topic: my-replicated-topic  Partition: 0    Leader: 1   Replicas: 1,2,0 Isr: 1,2,0

这将为您的主题提供一个分区列表,它们位于何处,哪个节点是该分区的主导节点(当用户需要来自该分区的数据时,会告诉他们从哪个节点消费),以及一些其他信息,如同步副本状态(in-sync replica status)或isr,以及复制因子。
Kafka官方文档中有更多信息。
请记住,当您的客户连接到 bootstrap-server 它没有指定从中读取数据的代理的完整列表。它只是指定一个(或多个)代理,从中获取有关集群的信息。当客户机从给定的主题和分区进行读/写操作时,该操作将直接执行到保存该数据的相关代理(不管引导中指定的特定代理)。你可以在这里和这里看到更多关于这个过程的信息。

dgtucam1

dgtucam12#

就像另一个答案所说的,一个主题不是属于某个特定的节点,也不是为某个特定的节点创建的,而是为集群创建的。每当创建主题时,分区都会在集群节点之间进行划分。每个分区都有一个前导节点和副本节点。生产者写入leader节点,kafka在内部复制副本节点上的数据。使用者使用来自其前导节点的分区数据。
为了更好地理解/可视化kafka中的主题分区分布,您可以使用kafdrop之类的工具,您可以按照repo for setup的readme部分中的步骤进行操作。你可以从这里下载最新的二进制文件。在ui中,您可以看到主题的每个分区的leader和replica节点。
设置非常简单,我个人觉得这个工具非常有用!

相关问题