繁体   English   中英

尽管我正在设置优化属性,但 Kafka 流应用程序仍在尝试创建更改日志主题

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM