Kafka流应用程序不消耗消息

时间:2017-12-06 20:59:55

标签: java apache-kafka apache-kafka-streams

我编写了一个小型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

感谢。

1 个答案:

答案 0 :(得分:1)

检查您是否正确提供了引导服务器

props.setProperty(
    StreamsConfig.BOOTSTRAP_SERVERS_CONFIG,
    "broker1,broker2"
); -->default is localhost:9092

确保您拥有名称为input_topicoutputtopic

的主题

预计会在您的流媒体作业开始后收到已发送到主题的消息,因为您已在属性中包含“最新”