[英]Kafka Stream StateStore infinite loop
我們有一個 KStream 應用程序,它使用內存中的 KV StateStore 但禁用了更改日志。
String stateStoreName = "statestore-v1";
StoreBuilder<KeyValueStore<String, Event>> keyValueStoreBuilder =
Stores.keyValueStoreBuilder(Stores.inMemoryKeyValueStore(stateStoreName),
Serdes.String(), new JsonSerde<>(Event.class));
keyValueStoreBuilder.withLoggingDisabled();
streamsBuilder.addStateStore(keyValueStoreBuilder);
我們現在想要啟用具有不同配置和不同名稱的更改日志。
String stateStoreName = "statestore-v2";
StoreBuilder<KeyValueStore<String, Event>> keyValueStoreBuilder =
Stores.keyValueStoreBuilder(Stores.inMemoryKeyValueStore(stateStoreName),
Serdes.String(), new JsonSerde<>(Event.class));
Map<String, String> changelogConfig = new HashMap<>();
changelogConfig.put("retention.ms", "43200000"); // 12 hours
changelogConfig.put("cleanup.policy", "delete");
changelogConfig.put("auto.offset.reset", "latest");
keyValueStoreBuilder.withLoggingEnabled(changelogConfig);
streamsBuilder.addStateStore(keyValueStoreBuilder);
當我們運行我們的應用程序時,我們進入了帶有這些消息的無限循環:
2022-10-11 13:02:32.761 app=myapp INFO 54561 --- [-StreamThread-3]
o.a.k.s.p.i.StoreChangelogReader : stream-thread [myapp-StreamThread-3]
End offset for changelog myapp-statestore-v2-changelog-4 cannot be found;
will retry in the next time.
2022-10-11 13:02:32.761 app=myapp INFO 54561 --- [-StreamThread-3]
o.a.k.clients.consumer.KafkaConsumer : [Consumer clientId=myapp-StreamThread-3-restore-consumer, groupId=null]
Unsubscribed all topics or patterns and assigned partitions
似乎從未創建過更改日志主題......至少kafka-topics
沒有顯示它。
我正在使用 io.confluent 包版本 7.2.2-ccs,我認為它轉換為 Apache Kafka 版本 3.2.x
關於如何修復無限循環並創建更新日志主題的任何想法?
謝謝!
無限循環是因為我們正在進行藍/綠部署。 我們了解到,如果我們正在使用 StateStore 進行任何更改(配置或禁用/重新啟用更改日志),我們將無法執行此操作。
我們只是完全關閉了舊版本,然后部署了新版本。 效果很好。
另一種選擇是使用 OneKricketeer 建議的kafka-streams-application-reset
工具。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.