我编写了一个小型kafka流应用程序,它在输入流上执行wordcount。我的代码看起来像这样
import org.apache.kafka.common.serialization.Serde;
import org.apache.kafka.streams.KafkaStreams;
import org.apache.kafka.streams.kstream.KStream;
import org.apache.kafka.streams.kstream.KStreamBuilder;
import org.apache.kafka.streams.kstream.KTable;
import java.util.Arrays;
import java.util.Properties;
public class kafkastreams
{
public static void main(String[] args) {
Properties props=new Properties();
props.setProperty(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG,"broker1,broker2");
props.setProperty(StreamsConfig.APPLICATION_ID_CONFIG,"streams");
props.setProperty(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,"latest");
props.setProperty(StreamsConfig.KEY_SERDE_CLASS_CONFIG,Serdes.String().getClass().getName());
props.setProperty(StreamsConfig.VALUE_SERDE_CLASS_CONFIG,Serdes.String().getClass().getName());
KStreamBuilder builder=new KStreamBuilder();
KStream<String,String> strings=builder.stream("input_topic");
KTable<String,Long> wordcounts=
strings.mapValues(value -> value.toLowerCase())
.flatMapValues(value -> Arrays.asList(value.split(",")))
.selectKey((k,v)->v)
.groupByKey()
.count("counts");
wordcounts.to(Serdes.String(),Serdes.Long(),"outputtopic");
KafkaStreams streams=new KafkaStreams(builder,props);
streams.start();
}
}
我的build.sbt文件看起来像这样
name := "kstreams"
version := "0.1"
scalaVersion := "2.11.0"
libraryDependencies += "org.apache.kafka" %% "kafka" % "0.10.1.1"
libraryDependencies += "org.apache.kafka" % "kafka-streams" % "0.10.1.1"
我已将应用程序打包到一个胖罐中,并一直试图将其作为
运行java -cp /path/to/the/fat/jar java-class-name
一旦我提交作业,我看到屏幕上没有任何回复,除了
Picked up JAVA_TOOL_OPTIONS: -Xmx1024m
我尝试使用控制台生产者发送一些测试消息,我在控制台上看不到任何响应,也没有任何消息被发送到输出主题,我正在从控制台消费者监控。
如果有人能帮忙解决这个问题会很棒。
我使用的是kerberized HDP群集(2.6.3),kafka版本是0.10.1
感谢。
答案 0 :(得分:1)
检查您是否正确提供了引导服务器
props.setProperty(
StreamsConfig.BOOTSTRAP_SERVERS_CONFIG,
"broker1,broker2"
); -->default is localhost:9092
确保您拥有名称为input_topic
和outputtopic
预计会在您的流媒体作业开始后收到已发送到主题的消息,因为您已在属性中包含“最新”