美文网首页
kafka-Streams 轻级流框架

kafka-Streams 轻级流框架

作者: 机器不能学习 | 来源:发表于2018-11-05 20:34 被阅读0次

Kafka Streams作为一个java库,具有轻量级的特点。

  • 因为轻量级的Lib,可以很方便的在Java里应用打包
  • 具有可容错性操作
  • 流式处理,延迟毫秒级
  • 支持窗口操作
几个概念:

流式计算- 输入是持续的,可以认为时间是无界的,同样输出的结果也是持续的,计算的结果在时间上也是无界的,其特点是计算十分高效。与它相反的是批量计算(如Spark streaming),批量可以看作是裁剪过的离线计算。

拓扑图:

拓扑图和spark的DAG类似。
都是用户逻辑图,表示了流的处理逻辑。
在Kafka中,一个拓扑图由流处理器构成,流处理器分为特殊处理器和算子处理器,下面会讲。调用代码 topology.describe()
会看见
Topologies:
Sub-topology: 0
Source: KSTREAM-SOURCE-0000000000 (topics: [streamfrom])
--> KSTREAM-FLATMAPVALUES-0000000001
Processor: KSTREAM-FLATMAPVALUES-0000000001 (stores: [])
--> KSTREAM-MAP-0000000002
<-- KSTREAM-SOURCE-0000000000
Processor: KSTREAM-MAP-0000000002 (stores: [])
--> KSTREAM-KEY-SELECT-0000000003
<-- KSTREAM-FLATMAPVALUES-0000000001
Processor: KSTREAM-KEY-SELECT-0000000003 (stores: [])
--> KSTREAM-FILTER-0000000006
<-- KSTREAM-MAP-0000000002
Processor: KSTREAM-FILTER-0000000006 (stores: [])
--> KSTREAM-SINK-0000000005
<-- KSTREAM-KEY-SELECT-0000000003
Sink: KSTREAM-SINK-0000000005 (topic: counts-repartition)
<-- KSTREAM-FILTER-0000000006

Sub-topology: 1
Source: KSTREAM-SOURCE-0000000007 (topics: [counts-repartition])
--> KSTREAM-AGGREGATE-0000000004
Processor: KSTREAM-AGGREGATE-0000000004 (stores: [counts])
--> KTABLE-MAPVALUES-0000000008
<-- KSTREAM-SOURCE-0000000007
Processor: KTABLE-MAPVALUES-0000000008 (stores: [])
--> KTABLE-TOSTREAM-0000000009
<-- KSTREAM-AGGREGATE-0000000004
Processor: KTABLE-TOSTREAM-0000000009 (stores: [])
--> KSTREAM-FOREACH-0000000010
<-- KTABLE-MAPVALUES-0000000008
Processor: KSTREAM-FOREACH-0000000010 (stores: [])
--> none
<-- KTABLE-TOSTREAM-0000000009

流处理器:

一个流处理器是拓扑图中的一个节点。它决定了用户的逻辑。
一个节点从上游接收数据,通过处理后将数据发给下游。
kafka有两个特别的处理器:Source处理器没有上游处理器,直接通过KafkaStreams拿到资源。Sink处理器没有下游处理器,将上游的数据直接发送到一个topic中。

状态:

在Kafka中的容错会以状态来修复。状态分为无状态和有状态。无状态意味着数据转换仅仅取决于当前处理的数据,如map().filter()。
有状态意味着数据的处理结果还依赖着外部状态,如join,aggregation,count,从刚刚拓扑图中,"counts"的store可以看见该count操作记录了以前的数据。
状态一般由stare store存储,调用Materialized.as()进行状态标记。

窗口:

窗口操作和spark类似,还是通过窗口长度和移动大小来操作。不同的是kafka是流式计算,处理的最小集不同了。
Kafka Streams定义了三种窗口:

跳跃时间窗口(hopping time window):

大小固定,可能会重叠的窗口模型

 2.翻转时间窗口(tumbling time window):

大小固定,不可重叠,无间隙的一类窗口模型

 3.滑动窗口(sliding window):

大小固定并且沿着时间轴连续滑动的窗口模型,如果两条记录时间戳之差在窗口大小之内,则这两条数据记录属于同一个窗口。在Kafka流中,滑动窗口只有在join操作的时候才用到。

api操作

配置:
配置上有StreamsConfig类,提供了各种配置参数,其中BOOTSTRAP_SERVERS_CONFIG代表运行该个流应用的broker的节点。
DEFAULT_KEY_SERDE_CLASS_CONFIG
DEFAULT_VALUE_SERDE_CLASS_CONFIG
key和value的序列化类都是Serdes

StreamsBuilder是一个入口类,可以用来定义拓扑结构。KafkaStreams流式客户端,传入的是topology(由Builer.buile获得)。通过调用它的 start()函数,我们可以触发这个客户端开始运行。除非在客户端上调用 close()函数,否则程序不会停止。

groupBy() 制定按什么分组的规则
join() 两个参数,第一个是join的对象,第二个是一个ValueJoiner类,该类决定了重复项的输出。
count()返回一个<K,Long>,Long为相同key的个数和countBykey()一样作用

相关文章

网友评论

      本文标题:kafka-Streams 轻级流框架

      本文链接:https://www.haomeiwen.com/subject/kyqexqtx.html