【发布时间】:2020-05-05 20:24:47
【问题描述】:
我想了解StatefulStream processor。
据我了解,在这种类型的流处理器中,它使用State Store 维护某种状态。
我知道,实现State Store 的方法之一是使用RocksDB。假设以下topology(并且只有一个处理器是stateful)
A->B->C;处理器 B 具有 local 状态存储和 changelog 启用 状态。我正在使用低级 API。
假设 sp 侦听单个 kafka 主题,假设 topic-1 有 10 个分区。
我观察到,当应用程序启动时(不同物理机中的 2 个实例和 num.stream.threads = 5),然后为 state store 创建目录结构
有如下内容:
0_0 , 0_1, 0_2.... 0_9 (每台机器有 5 个所以总共 10 个分区)。
我浏览了一些在线材料,上面说我们应该创建一个StoreBuilder 并使用addStateStore() 附加拓扑而不是 创建一个状态存储在处理器中。
喜欢:
topology.addStateStore(storeBuilder,"processorName")
Ref also: org.apache.kafka.streams.state.Store
我不明白将 storeBuilder 附加到拓扑与实际在处理器中创建 statestore 有什么区别。它们之间有什么区别?
第二部分:对于 statestore,它创建目录,例如:0_0、0_1 等。它是由谁以及如何创建的? kafka 主题(sp 正在监听的)与为State Store 创建的目录数量之间是否存在某种 1:1 映射?
【问题讨论】:
标签: apache-kafka apache-kafka-streams