kafkaStreams初识

如何使用好流式处理.流式处理从成本和人力该如何考虑,以及应用场景.

数据以及kafkaStreams的理念

  1. 数据的发展如何改变程序设计的
  2. 流式处理工作以及应用场景
  3. kafkaStreams的简介以及解决问题

数据的发展如何改变程序设计的

在现在的世界中,每天的数据越来越多。如何有有效的利用这些数据,就是我们当下需要考虑的点

现在有2种方式处理数据,一种是我们进行批量处理数据(批处理)这些数据都是离线的,第二种就是数据在到达的时候就需要进行处理。

kafkaStream是一个对记录的每个时间进行处理的库,基于每个时间就意味着数据一旦到达,就能够被及时处理.不需要将数据分成小批量的

MapReduce范式(补充)

map会对每个记录产生一个键值对.而reduce基于每个键合并,处理中间结果

对于TB级别以上的数据有几个概念让我们更好的处理数据

  1. 一个集群中分发的数据达到易于处理的规模
  2. 使用键值对讲分布式的数据分组
  3. 利用副本备份机制容忍故障的产生,而不是避免故障

也就是通过计算机集群中的分散负载,就可以将数据转化为可管理的数量

其次如何将分布在不同机器上的数据进行汇总也就是分区

分区意味着分组.使用相同的散列码的键进行分组。

公式如下: partition = key.hashCode()% numberOfPartitions

补充:通过使用复制来接受故障。通过复制不同服务器上的数据块,不必担心磁盘故障导致停产.数据复制能够对于分布式的应用提供容错能力至关重要

离线计算的瓶颈

  1. 离线计算首先需要收集大量的数据,批处理的离线计算适合根据根据用户大量的习惯来决定未来可能会发生的事情
  2. 如果用户的习惯是偶然性,那就无法判断资源价值的有效利用

面对的问题

  1. 当前实时的趋势是什么?
  2. 最近一个周期时间段的特征是什么?
  3. 用户如何利用最新的发布的特性的?

流式处理工作以及应用场景

  1. 定义:流式处理是利用连续计算处理无线数据流的能力,数据是流动的,所以无需收集以及存储数据。

流式数据的应用场景

  1. 信用卡诈骗:根据实时的消费记录,以及对比用户前期的消费习惯和地点,可能信用卡被盗刷.提醒信用卡的拥有者
  2. 入侵检测:实时监控异常行为.
  3. 大型自行车比赛:通过实时传输的数据,监测位置。以及比赛可能会遇到的问题。
  4. 金融业:根据实时买入卖出,提供决策能力

场景:数据到达时需要被立即报告处理,那么可以选择流式处理

如果需要对许菊进行深入分析.或者为了编制一个大的数据仓库以备后期分析,那么这个时候需要离线计算

kafkaStreams的简介以及解决问题

假定有一个实时销售系统,我们要根据实时的数据对每个客户甚至于公司的团队制定决策

需求分解:有向无环图

购买记录 —-> 屏蔽信息

屏蔽信息 —-> 存储

----> 奖励

----> 模式

分析节点

源节点 —> 每条销售信息记录

信用卡屏蔽节点 —-> 将源节点的信息中卡号进行屏蔽

模式节点 —-> 检索相关的物品,日期,邮政编码组装为一个新的对象

奖励节点 —-> 抽取客户的ID和实时的消费金额

存储节点 —-> 存储到相信的关系或者非关系数据中进行分析

注意:至始至终,这种有向无环图,我们都以深度优先的方式进行遍历以及处理数据。深度优先和广度优先可以参考

深度和广度优先

Java实现深度优先遍历和广度优先遍历

总结:数据交由了节点和处理器来进行共同的维护。节点即是需求规则,最终会将节点数据传输到对应的主题中,而处理器则存在在kafkaStream流上。处理器所处理的数据产生出来都是一个新的对象