【问题标题】:What is the correlation in kafka stream/table, globalktable, borkers and partition?kafka 流/表、globalktable、borkers 和分区的相关性是什么?
【发布时间】:2020-04-20 16:32:34
【问题描述】:
我正在研究 kafka 流、表、globalktable 等。现在我对此感到困惑。
GlobalKTable 到底是什么?
但总的来说,如果我有一个包含 N 个分区的主题和一个 kafka 流,那么在我发送一些关于该主题的数据之后,我会有多少流(分区?)?
我做了一些尝试,我注意到比赛是 1:1。但是,如果我将主题复制到不同的代理上怎么办?
谢谢大家
【问题讨论】:
标签:
apache-kafka
apache-kafka-streams
spring-kafka
【解决方案1】:
我会尽力回答您的问题,因为您在此处列出了这些问题。
GlobalKTable 具有在您的 Kafka Streams 应用程序的每个实例中可用的所有分区。但是 KTable 被划分为应用程序的所有实例。换句话说,您的 Kafka Streams 应用程序的所有实例都可以访问 GlobalKTable 中的所有记录;因此它用于更多的静态数据,更多地用于连接中的查找记录。
对于具有 N 个分区的主题,如果您有一个 Kafka Streams 应用程序,它将使用并处理来自输入主题的所有记录。如果您要启动流应用程序的另一个实例,那么每个应用程序将处理一半数量的分区,由于工作的并行化,从而为您提供更高的吞吐量。
例如,如果您的输入主题 A 具有四个分区和一个 Kafka Streams 应用程序,那么单个应用程序会处理所有记录。但是,如果您要启动同一个 Kafka Streams 应用程序的两个实例,那么每个实例将处理来自 2 个分区的记录,工作负载被分配到具有相同应用程序 ID 的所有正在运行的实例中。
在 Kafka 中,默认情况下主题在不同的代理之间复制,其中 3 是默认的复制级别。复制级别 3 意味着给定分区的记录存储在该分区的领导代理和其他两个跟随代理(假设一个三节点代理集群)上。
希望这能解决一些问题。
-比尔