[英]Kafka streams application is still trying to create changelog topic though i am setting the optimization property
下面是我正在使用的代碼片段,
`streamsConfiguration.put(StreamsConfig.APPLICATION_ID_CONFIG, "wordcount-live-test"); streamConfiguration.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "brokerIP:port"); streamConfiguration.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName()); streamConfiguration.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName()); 流配置.put( StreamsConfig.TOPOLOGY_OPTIMIZATION, StreamsConfig.OPTIMIZE );
StreamBuilder builder = new StreamBuilder(); KStream streamData = builder.stream(inputTopicName);
streamData.groupByKey(Grouped.with(jsonSerde,jsonSerde)).aggregate( //一些轉換 );
KafkaStreams kafkaStreams = new KafkaStreams(builder.build(streamConfiguration),streamConfiguration); `
我檢查了融合頁面的優化方法並遵循了建議的更改。 但它仍然試圖生成changelogTopic。
我理解您在這里的困惑,但變更日志主題的優化僅適用於源KTable
操作。 例如:
KTable<String, String> someTable = builder.table("topic");
啟用優化后,Kafka Streams 也將使用KTable
的源主題作為更改日志主題。
如果您不希望 Kafka Streams 為您的聚合創建變更日志主題,那么您需要使用Materialized.withLoggingDisabled()
config object 顯式禁用它:
streamData.groupByKey(Grouped.with(jsonSerde,jsonSerde)) .aggregate(initializer, aggregator, Materialized.as("store-name").withLoggingDisabled();
以上只是一個例子; 如果需要,您還可以使用Materialized
來配置鍵和值Serdes
。 但底線是防止您需要使用Materialized.withLoggingDisabled()
的更改日志主題。
此外,您可以使用StoreBuilder
配置更改日志主題。 Stores
的 Javadoc 有一個使用StoreBuilder
的簡短示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.