如何在 Kafka Streams 中实现多个分区的总计数
How to implement total count over multiple partitions in Kafka Streams
假设我们有一个包含 5 个分区的 inData 主题,其中包含合同数据和 contractId 作为键。我有 3 个 Kafka 流应用程序实例,它计算合同的数量。
现在我想在我的 Kafka 流应用程序中实现合同总数。
现在我读到每个流应用程序只分配给一个分区。这意味着,Kafka 流应用程序的每个实例都只有每个分区的计数?
合同执行总数如何统计?我是否需要只有一个分区的中间主题?可以使用 globalTable 来实现吗?
使用 GlobalKTable
或全局状态存储是行不通的(至少不能直接使用),因为两者都只能存储来自主题的未修改数据,但是,您想进行一些处理(即,计数).
如果你想计算所有唯一的 contactId
你应该首先将数据加载到 KTable
(通过 builder.table()
)然后做一个 groupBy().count()
- 在groupBy()
您将所有记录映射到同一个新键。因为所有记录都映射到同一个键,它们将被重新分区到同一个主题分区,因此你得到一个全局计数。
假设我们有一个包含 5 个分区的 inData 主题,其中包含合同数据和 contractId 作为键。我有 3 个 Kafka 流应用程序实例,它计算合同的数量。
现在我想在我的 Kafka 流应用程序中实现合同总数。 现在我读到每个流应用程序只分配给一个分区。这意味着,Kafka 流应用程序的每个实例都只有每个分区的计数?
合同执行总数如何统计?我是否需要只有一个分区的中间主题?可以使用 globalTable 来实现吗?
使用 GlobalKTable
或全局状态存储是行不通的(至少不能直接使用),因为两者都只能存储来自主题的未修改数据,但是,您想进行一些处理(即,计数).
如果你想计算所有唯一的 contactId
你应该首先将数据加载到 KTable
(通过 builder.table()
)然后做一个 groupBy().count()
- 在groupBy()
您将所有记录映射到同一个新键。因为所有记录都映射到同一个键,它们将被重新分区到同一个主题分区,因此你得到一个全局计数。