我们假设我们有一个配置实例,如下所示,状态在商店中保存。
主题 - 1
隔板 - 6
num.stream.threads - 6
Toplogy
来源 - 1
低级处理器 - 3个(每个,每月和每年一个处理器)
聚合)
下沉 - 3
如果为每日处理器分配了2个并行任务,并且如果计划每隔30分钟运行标点符号,并且如果我们将所有商店转发到接收器1,则在覆盖中,将是keyvalue存储被两次发布到接收器,因为2个并行任务共享同一个存储,或者每个任务是否有自己的存储,并且只发布与它们被分配的分区相对应的数据,这些数据被保存在各自的存储中?
KeyValueIterator<String, House> keyValueIterator = houseStore.all();
while (keyValueIterator.hasNext()) {
KeyValue<String, House> next = keyValueIterator.next();
context.forward(next.key, next.value);
}
keyValueIterator.close();
如果我们改为使用KTable(每天,每月和每年聚合一个)高级DSL,那么会有多少任务?可以有两个并行任务更新相同的KTable(比如说每天)吗?
答案 0 :(得分:0)
Kafka Streams将创建6个任务,因为源主题有6个分区。状态将被划分为6个分片,每个任务一个分片。因此,任务中的本地存储是任务独占的,并且仅包含相应分片的数据。如果您按任务扫描整个商店,则不会在输出主题中获得重复数据,因为每个分片中的数据不同。