余老师带你学习大数据-Spark快速大数据处理第十章Kafka第七节Kafka-Stream

Kafka Stream

Kafka Stream基本概念

1、Kafka Stream是处理分析储存在Kafka数据的客户端程序库
2、Kafka Stream通过state store可以实现高校状态操作
3、支持原语Processor和高层抽象DSL
在这里插入图片描述

最上面的P0、P1、P2、P3是partition的数据,P0、P1、P2、P3这些组成的是topic,topic的数据会分散在不同的Task上,Thread就是线程,将不同的数据发到不同的Task中做处理,处理之后会有一个单独的State去记录我们的状态。

Kafka Stream关键词

1、流及流处理器:流是数据流,流处理器是在整个流向的过程中对里面的数据做一些处理,它可能有很多节点,有可能有不同的目标。
2、流处理拓扑:就是一个拓扑图,这个图包含了流的走向、流处理的节点。
3、源处理器及Sink处理器:源处理器是指数据的源头,Sink处理器是结果处理器。
在这里插入图片描述

Source Processor是源处理器,每条线就是Stream就是流,最后当出结果了就是Sink处理器,将所有的数据做汇总。
高层架构图
在这里插入图片描述

P0、P1、P2、P3是partition,这些数据由一个一个的consumer去消费,中间的流可以不用管,消费完成之后,会将所有的生成数据汇总成一个producer,producer会继续推送到partition中。从图中可以看出来kafka流处理默认的是从一个topic中拿出数据,经过流处理再用producer推给另外一个topic。那么有可能是一个topic也有可能是多个topic,这里建议是多个topic,至少两个topic,一个接收待处理的数据,一个接受处理完的数据。

代码解释操作

1、先创建两个topic,一个负责接受一个负责发送。先用Admin创建topic。
命令:
编译:mvn compile -Dexec.mainClass="com.kinginsai.bigdata.kafka.admin.AdminSample"
运行:mvn exec:java -Dexec.mainClass="com.kinginsai.bigdata.kafka.admin.AdminSample" -Dexec.classpathScope=runtime -Dmaven.test.skip=true
在这里插入图片描述
在这里插入图片描述
运行结果:
在这里插入图片描述

2、这次演示的名称是wordcount-app,StreamBuild是怎么构建kafka的流,这个流是长期持久的,会一直不断的输入流里面的东西,就会有一个start。
KStream中的key和value都是String类型,source就是从哪个topic中读取数据,用空格做截取,统计Wordcount。然后组合并,将相同的单词放到一起,再做整合。整合之后返回的数据类型不是数据,返回的是KTable,将count构建到流上,再写到接收的topic。
KStream是不断从INPUT_topic上获取新数据,并且追加到流上的一个抽象对象,类似于栈的一个东西,不断的压栈。
KTable是数据集合的抽象对象。
flatMapValues是将一行数据拆分成多行数据,将拆分的数据每次整合到组里的每一步都是算子。
命令:
编译:mvn compile -Dexec.mainClass="com.kinginsai.bigdata.kafka.stream.StreamSample"
运行:mvn exec:java -Dexec.mainClass="com.kinginsai.bigdata.kafka.stream.StreamSample" -Dexec.classpathScope=runtime -Dmaven.test.skip=true
在这里插入图片描述
运行结果:
在这里插入图片描述

3、验证是否运行成功,在集群中,打开app-11,新建new terminal,以hadoop用户登录,进入到Kafka的安装目录下,输入songshu-stream-in t要输入的信息,再新建new terminal,输入songshu-stream-out接受的信息
命令:
bin/kafka-console-producer.sh --broker-list app-11:9092 --topic songshu-stream-in
这里输入的信息分别是Hello World Kafka、Hello World songshu、Hello Kafka songshu
在这里插入图片描述

命令:
bin/kafka-console-consumer.sh --bootstrap-server app-11:9092 --topic songshu-stream-out --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
看最后的三行就是3个hello,2个world,2个Kafka,前面的因为是每行都读做一次worldcount,将不同的world做了一次整合,之后再有相同的会整合到之前的上面,最后的输出一次。
在这里插入图片描述

4、演示下算子,
在这里插入图片描述
运行结果:
在这里插入图片描述

5、在new terminal中输入要输入的信息
在这里插入图片描述

6、返回程序查看结果,前面的key不重要,后面的world就是以空格分隔,一个一个的数据,再整合到组中。
在这里插入图片描述

详细学习内容可观看Spark快速大数据处理扫一扫~~~或者引擎搜索Spark余海峰
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45810046/article/details/113111547