Kafka流:流线程与存储

时间:2018-06-06 04:43:50

标签: apache-kafka apache-kafka-streams

我们假设我们有一个配置实例,如下所示,状态在商店中保存。

主题 - 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(比如说每天)吗?

1 个答案:

答案 0 :(得分:0)

Kafka Streams将创建6个任务,因为源主题有6个分区。状态将被划分为6个分片,每个任务一个分片。因此,任务中的本地存储是任务独占的,并且仅包含相应分片的数据。如果您按任务扫描整个商店,则不会在输出主题中获得重复数据,因为每个分片中的数据不同。