java操作 集群) kafka streams 入门实例(wordcount)详细流程

根据官方文档的说明首先需要先设置集群的端口:9092

在三台虚拟机的kafka配置文件里(server.properties) 修改如下:

如果没有在/etc/hosts文件里映射主机名跟ip地址的话,master就改为你的ip地址,我这里映射了所以是主机名:master

我的另外的两台机的配置分别为:

下面进行idea环境的配置

在idea上创建一个maven工程

然后在poml.xml文件里增加kafka-streams的依赖包:

<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-streams -->
<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-streams</artifactId>
    <version>2.2.2</version>
</dependency>

开始写我们的wordcount代码,代码如下:
主要代码里面的192.168.65.25为我master的ip映射,这里需要改为你的master的ip地址

import org.apache.kafka.common.serialization.Serdes;
import org.apache.kafka.streams.KafkaStreams;
import org.apache.kafka.streams.StreamsBuilder;
import org.apache.kafka.streams.StreamsConfig;
import org.apache.kafka.streams.kstream.KStream;
import org.apache.kafka.streams.kstream.KTable;
import org.apache.kafka.streams.kstream.Produced;

import java.util.Arrays;
import java.util.Locale;
import java.util.Properties;


public class SteamSample {

    private static final String INPUT_TOPIC= "input";  //这个为生产者topic
    private static final String OUTPUT_TOPIC= "output";//这个为消费者topic

    public static void main(String[] args) {
        Properties props = new Properties();
        props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG,"192.168.65.25:9092"); //master 主机映射 192.168.65.25
        props.put(StreamsConfig.APPLICATION_ID_CONFIG,"wordcount9");
        props.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass());
        props.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass());
        //如何构建流结构拓扑
        final StreamsBuilder builder = new StreamsBuilder();
        //构建Wordcount procesccc
        wordcountStream(builder);

        final KafkaStreams streams = new KafkaStreams(builder.build(),props);

        streams.start();


    }
    //如何定义流计算过程
    static void wordcountStream(final StreamsBuilder builder){
        //不断从INPUT_TOPIC上获取新数据,并且追加到流上的一个抽象对象
        KStream<String,String> source = builder.stream(INPUT_TOPIC);
        //Hello World imooc
        //KTable是数据集合的抽象对象
        final KTable<String, Long> count =
                source.flatMapValues(value-> Arrays.asList(value.toLowerCase(Locale.getDefault()).split("")))
                        .groupBy((key, value)->value)
                        .count();
        count.toStream().to(OUTPUT_TOPIC, Produced.with(Serdes.String(),Serdes.Long()));
        System.out.println("2");

    }
}

我们先在kafka环境里创建我们的输入topic跟输出topic

在master端口分别输入:

kafka-topics.sh --create \
    --bootstrap-server localhost:9092 \
    --replication-factor 1 \
    --partitions 1 \
    --topic input

kafka-topics.sh --create \
    --bootstrap-server localhost:9092 \
    --replication-factor 1 \
    --partitions 1 \
    --topic output

当然要确保我们的kafka是完美启动了的!!!!!

创建好了topic后,先在idea让我们的wordcount代码跑起来,即先运行idea的wordcount代码

然后新开一个master,启动一个生产者即input:

kafka-console-producer.sh --broker-list localhost:9092 --topic input

然后在输入一些字母,如下:

然后在新开一个master,启动消费者即output:

kafka-console-consumer.sh --bootstrap-server localhost:9092 \
 --topic output \
 --property print.key=true \
 --property print.value=true \
 --property key.deserializer=org.apache.kafka.common.serialization.StringDeserializer \
 --property value.deserializer=org.apache.kafka.common.serialization.LongDeserializer \
 --from-beginning

然后可以看到stream的处理结果。

该stream的好玩之处在于你可以实时处理你在生产者输入的字母,然后消费者可以统计字母出现的次数。

做完,可以citl + C 关闭生产者跟消费者。

本次的kafka stream演示到此为止啦,有啥问题在下方评论,感谢感谢!!!

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一条小海龟

谢谢你的打赏,微臣会好好努力达

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值