[英]Kafka Streams: does StateStore contains all data or only some partitioned data when get from context?
我有一個帶有多個分區的 kafka 主題和一個讀取該主題的 kafka 流應用程序。
kafka 流應用程序包含一個將數據存儲到本地 RockDB 持久 StateStore DB 的 Transaformer。 Transformer 由框架通過 TransformerSupplier 自動實例化
TransformerSupplier<String, Message, KeyValue<String, Message>> getTransformerSupplier(){
if(transformerSupplier == null)
transformerSupplier = () -> new MyTransformer();
return transformerSupplier;
}
此外,transformer 會調度一個標點符號,該標點符號需要對同一個 StateStore 執行操作。
我的問題是:當標點符號讀取StateStore時,所有分區的所有元素都被讀取或上下文接收到的StateStore僅限於transformer讀取的分區?
這是我的變壓器的一個例子:
public class MyTransformer implements Transformer<String, Message, KeyValue<String, Message>> {
private KeyValueStore<String, Message> stateStore;
private ProcessorContext context;
private MyScheduler myScheduler;
@Override
public void init(ProcessorContext context) {
this.context = context;
stateStore = this.context.getStateStore(myStateStoreName);
myScheduler.initAndSchedule(this.context);
}
@Override
public KeyValue<String, Message> transform(String key, Message newValue) {
stateStore.put(key, newValue);
return null;
}
這是我的標點符號的內容
public void initAndSchedule(ProcessorContext context) {
this.context = context;
stateStore = this.context.getStateStore(myStateStoreName);
this.context.schedule(Duration.ofSeconds(schedulerSeconds), PunctuationType.WALL_CLOCK_TIME, this);
}
@Override
public void punctuate(long timestamp) {
stateStore.all().forEachRemaining(keyValue -> {
logger.info(" StateStore key {}", keyValue.key);
});
}
如上所述,StateStore 由 Transformer 的上下文給出,但“stateStore.all().forEachRemaining()”函數允許我掃描主題接收到的所有數據,還是只掃描提供上下文的轉換器准備好的分區?
實際場景:KafkaTopic 包含 10 個分區 -> 我們有 2 個 pod,每個 pod 讀取 5 個分區 -> 每個 pod 的 transformerSupplier 創建 3 個 MyTransformer 實例,每個實例讀取 2 或 1 個分區,因此每個 LocalStore 將包含 5 個分區的數據 - > 每個轉換器實例化一個調度程序,因此每個讀取 LocalStores 的 pod 有 3 個調度程序實例。 他們可以訪問整個 5 個分區還是只能訪問由變壓器處理的 2 個或 1 個分區?
謝謝
我添加了一些日志記錄,實際上是由提供的 StateStore
this.context.getStateStore(myStateStoreName);
標點符號僅包含來自 myTransformer 讀取的分區的數據。 因此,需要標點符號的所有實例來讀取所有數據
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.