[英]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.