赞
踩
Kafka Streams是Apache Kafka开源项目的一个流处理框架,它是基于Kafka的生产者和消费者,为开发者提供了流式处理的能力,具有低延迟性、高扩展性、弹性、容错的特点,易于集成到现有的应用程序中。
Kafka Streams是一套处理分析Kafka中存储数据的客户端类库, 处理完的数据可以重新写回Kafka,也可以发送给外部存储系统。作为类库,可以非常方便的嵌入到应用程序中,直接提供具体的类供开发者调用,而且在打包和部署的过程中基本没有任何要求,整个应用的运行方式主要由开发者控制,方便使用和调试。
在流式计算框架的模型中,通常需要构建数据流的拓扑结构,例如生产数据源、分析数据的处理器以及处理完成后发送的目标节点, Kafka流处理框架同样是将“输入主题->自定义处理器->输出主题’抽象成一个DAG拓扑图, 如图所示。
图6-1 计算流程拓扑图
在图中,生产者作为数据源不断生产和发送消息至Kafka的testStreams1主题中,然后通过自定义处理器(Processor)对每条消息执行相应计算逻辑,最后将结果发送到Kafka的testStreams2主题中供消费者消费消息数据。
需要注意的是,任务的执行拓扑图是一张有向无环图(DAG) 。有向表示从一个处理节点到另一个处理节点是具有方向性的,无环表示不能有环路,因为一旦有环路,就会陷入死循环状态,任务将无法结束。
本节,将通过实时计算单词出现的次数的经典案例,分步骤讲解开发流程。
在spark_chapter06项目中, 打开pom.xm文件,添加Kafka Streams依赖,配置参数如下所示。
文件6-5 pom.xm
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams</artifactId>
<version>2.0.0</version>
</dependency>
添加相关依赖时,要注意选择匹配当前版本号,避免兼容性问题。
根据上述业务流程分析得出,单词数据通过自定义处理醋接收并执行相应业务计算,因此创建LogProcessor类, 并且继承Streams API中的Processor接口,在Processor接口中, 定义了以下三个方法:
●Init(ProcessorContext processorContext):初始化上下文对象。
●process(Key, Value): 每按收到一条消息时,都会洞用该方法处理并更新状态进行存储。
●close(): 关闭处理器,这里可以做一些资源清理工作。
Kafka Strearms单词计数详田代码如文件所示。
文件6-6 LogProcessor.java
package cn.itcast.Streams;
import org.apache.kafka.streams.processor.Processor;
import org.apache.kafka.streams.processor.ProcessorContext;
import java.util.HashMap;
public cla
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。