Spring 使用卡夫卡流查找特定单词
我已经从那里创建了rest端点数据,我将它发送到卡夫卡主题“主题反馈”。现在我想处理这些数据并将其发送到另一个卡夫卡主题“主题好词”。现在,从rest结束点数据正确地到达主题“主题反馈”,但经过处理并发送到另一个主题“主题好词”后,“主题好词”中看不到数据 程序中没有错误 这是我的密码:Spring 使用卡夫卡流查找特定单词,spring,apache-kafka,apache-kafka-streams,Spring,Apache Kafka,Apache Kafka Streams,我已经从那里创建了rest端点数据,我将它发送到卡夫卡主题“主题反馈”。现在我想处理这些数据并将其发送到另一个卡夫卡主题“主题好词”。现在,从rest结束点数据正确地到达主题“主题反馈”,但经过处理并发送到另一个主题“主题好词”后,“主题好词”中看不到数据 程序中没有错误 这是我的密码: @Configuration public class FeedbackStream { Set<String> GOOD_WORDS = Set.of("happy&q
@Configuration
public class FeedbackStream {
Set<String> GOOD_WORDS = Set.of("happy", "good", "helpful");
@Bean
public KStream<String,String> KStreamFeedback(StreamsBuilder builder)
{
var stringSerde = Serdes.String();
var feedbackSerde = new JsonSerde<>(Feedback.class);
((JsonDeserializer) feedbackSerde.deserializer()).setUseTypeHeaders(false);
var sourceStream = builder.stream("topic-feedback", Consumed.with(stringSerde,feedbackSerde))
.flatMapValues(mapperGoodWords());
sourceStream.to("topic-goodWord", Produced.with(stringSerde,stringSerde));
return sourceStream;
}
private ValueMapper<Feedback,Iterable<String> > mapperGoodWords()
{
return feedback -> Arrays
.asList(feedback.getFeedback().replaceAll("[^a-zA-Z]", "").toLowerCase()
.split("\\s+")).stream()
.filter(word -> GOOD_WORDS.contains(word)).distinct().collect(Collectors.toList());
}
卡夫卡流配置
@Configuration
@EnableKafkaStreams
public class KafkaStreamConfig {
@Bean(name = KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_CONFIG_BEAN_NAME)
public KafkaStreamsConfiguration kafkaStreamConfig()
{
var props = new HashMap<String, Object>();
props.put(StreamsConfig.APPLICATION_ID_CONFIG, "kafka-stream");
props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG,"localhost:9092");
props.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
props.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG,Serdes.String().getClass().getName());
props.put(JsonDeserializer.USE_TYPE_INFO_HEADERS,"false");
return new KafkaStreamsConfiguration(props);
}
}
@配置
@使能卡夫卡团队
公共类KafkaStreamConfig{
@Bean(name=KafkaStreamsDefaultConfiguration.DEFAULT\u STREAMS\u CONFIG\u Bean\u name)
公共kafkastreams配置kafkaStreamConfig()
{
var props=newhashmap();
put(StreamsConfig.APPLICATION_ID_CONFIG,“卡夫卡流”);
put(StreamsConfig.BOOTSTRAP\u SERVERS\u CONFIG,“localhost:9092”);
props.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG,Serdes.String().getClass().getName());
props.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG,Serdes.String().getClass().getName());
put(JsonDeserializer.USE_TYPE_INFO_头,“false”);
返回新的Kafkastreams配置(道具);
}
}
我错在哪里?塔萨,这就是我所看到的卡夫卡流的问题,有时候,它会吃掉那些例外。但无论如何,现在你们的问题是,若它并没有到达另一个主题,那个就意味着它可能是序列化问题。你也这样做,因为我在这里没有看到
var kafkaStreams = new KafkaStreams(sourceStream, streamsConfiguration);
kafkaStreams.start();
您已经创建了一个KStream拓扑,但您实际上从何处启动它,以便读取/处理任何数据?@OneCricketeer我已经从那里创建了rest端点数据即将到来,我正在将其发送到kafka主题“主题反馈”。现在我想处理这些数据并将其发送到另一个卡夫卡主题“主题好词”。现在,从rest结束点数据正确地到达主题“主题反馈”,但经过处理并发送到另一个主题“主题好词”后,“主题好词”中看不到数据。程序中没有错误。我理解你的代码试图做什么,但不清楚你是否像答案所示调用了
start()
。这里所做的就是定义一些方法和一个bean。可能没有错误,因为在我之前关于卡夫卡主题的练习程序中,您从未在任何地方加载此bean来启动stream@OneCricketeer,我没有使用start()
,但它们工作得很好。现在我创建了一个新主题,但似乎我并没有在配置中提到新的流。这就是问题所在吗?我很困惑。请帮帮我。我不知道您最终在这里使用的是什么Spring库,但根据我添加的Kafka stream config文档,它不是Kafka Streams活页夹。除此之外,我还有另一个主题的文件。这次我创建了一个新的主题。但是我还没有配置新主题的新流(通道)。这就是问题所在吗?因为这是第一个没有显示输出的新主题和新流的程序。很抱歉,我还没有在以前的程序中使用您的上述代码,但它们工作正常。请引导我,我很困惑。
var kafkaStreams = new KafkaStreams(sourceStream, streamsConfiguration);
kafkaStreams.start();