首页 > 解决方案 > Apache Kafka (KStreams):如何订阅多个主题?

问题描述

我有以下代码

//Kafka Config setup
Properties props = ...; //setup

List<String> topicList = Arrays.asList({"A", "B", "C"});

StreamBuilder builder = new StreamBuilder();
KStream<String, String> source = builder.stream(topicList);

source
.map((k,v) -> { //busy code for mapping data})
.transformValues(new MyGenericTransformer());
.to((k,v,r) -> {//busy code for topic routing});

new KafkaStream(builder.build(), properties).start();

我的问题:当我添加多个订阅主题(即上面的 A、B、C)时,Kstream 代码停止接收记录。

参考资料: https ://kafka.apache.org/10/javadoc/org/apache/kafka/streams/StreamsBuilder.html

相关文件

public <K,V> KStream<K,V> stream(java.util.Collection<java.lang.String> topics)

"If multiple topics are specified there is no ordering guarantee for records from different topics."

我想要实现的目标:让一个 Kstream(即上面的“源”)从多个主题中消费/处理。

标签: javaapache-kafkakafka-consumer-apiapache-kafka-streams

解决方案


主题是否共享相同的键?

请注意,指定的输入主题必须按 key 进行分区。如果不是这种情况,则用户有责任在将任何基于键的操作(如聚合或连接)应用于返回的 KStream 之前重新分区数据。

这可能是你的阻碍。

另一个可能的问题可能是使用的消费者组。


推荐阅读