Kafka 流:流线程与存储
Kafka streams: stream threads vs store
假设我们有一个配置如下的实例,状态在商店中维护。
主题 - 1
分区 - 6
num.stream.threads - 6
拓扑
来源 - 1
低级处理器 - 3(每日、每月和每年各一个处理器
聚合)
下沉 - 3
- 上述拓扑和主题分区可以并行执行多少个任务?
如果有 2 个并行任务分配给 Daily 处理器,并且如果 punctuate 被安排为每 30 分钟 运行,并且如果我们转发所有存储到接收器 1,键值存储是否会被发布到接收器两次,因为 2 个并行任务共享同一个存储或者每个任务都有自己的存储并且只会发布与它们分配的分区对应的数据坚持在各自的商店?
KeyValueIterator<String, House> keyValueIterator = houseStore.all();
while (keyValueIterator.hasNext()) {
KeyValue<String, House> next = keyValueIterator.next();
context.forward(next.key, next.value);
}
keyValueIterator.close();
如果我们使用高级 DSL 的 KTable(每天、每月和每年聚合一个),会有多少任务?是否可以有两个并行任务更新同一个 KTable(比如每天)?
Kafka Streams 将创建 6 个任务,因为源主题有 6 个分区。状态,将被划分为 6 个分片,每个任务一个分片。因此,任务中的本地存储是任务独占的,只包含相应分片的数据。如果您按任务扫描整个商店,您将不会在输出主题中获得重复数据,因为它在每个分片中都是不同的数据。
假设我们有一个配置如下的实例,状态在商店中维护。
主题 - 1
分区 - 6
num.stream.threads - 6
拓扑
来源 - 1
低级处理器 - 3(每日、每月和每年各一个处理器
聚合)
下沉 - 3
- 上述拓扑和主题分区可以并行执行多少个任务?
如果有 2 个并行任务分配给 Daily 处理器,并且如果 punctuate 被安排为每 30 分钟 运行,并且如果我们转发所有存储到接收器 1,键值存储是否会被发布到接收器两次,因为 2 个并行任务共享同一个存储或者每个任务都有自己的存储并且只会发布与它们分配的分区对应的数据坚持在各自的商店?
KeyValueIterator<String, House> keyValueIterator = houseStore.all(); while (keyValueIterator.hasNext()) { KeyValue<String, House> next = keyValueIterator.next(); context.forward(next.key, next.value); } keyValueIterator.close();
如果我们使用高级 DSL 的 KTable(每天、每月和每年聚合一个),会有多少任务?是否可以有两个并行任务更新同一个 KTable(比如每天)?
Kafka Streams 将创建 6 个任务,因为源主题有 6 个分区。状态,将被划分为 6 个分片,每个任务一个分片。因此,任务中的本地存储是任务独占的,只包含相应分片的数据。如果您按任务扫描整个商店,您将不会在输出主题中获得重复数据,因为它在每个分片中都是不同的数据。