差异|Kafka Streams与其他流处理平台的差异在哪里?
近些年来 , 开源流处理领域涌现出了很多优秀框架 。 光是在 Apache 基金会孵化的项目 , 关于流处理的大数据框架就有十几个之多 , 比如早期的 Apache Samza、ApacheStorm , 以及这两年火爆的 Spark 以及 Flink 等 。
应该说 , 每个框架都有自己独特的地方 , 也都有自己的缺陷 。 面对这众多的流处理框架 , 我们应该如何选择呢?在本文汇总 , 我就来梳理几个主流的流处理平台 , 并重点分析一下 KafkaStreams 与其他流处理平台的差异 。
什么是流处理平台?
首先 , 我们有必要了解一下流处理平台的概念 。 “Streaming Systems”一书是这么定义“流处理平台”的:流处理平台(Streaming System)是处理无限数据集(Unbounded Dataset)的数据处理引擎 , 而流处理是与批处理(Batch Processing)相对应的 。
所谓的无限数据 , 是指数据永远没有尽头 。 流处理平台是专门处理这种数据集的系统或框架 。 当然 , 这并不是说批处理系统不能处理这种无限数据集 , 只是通常情况下 , 它更擅长处理有限数据集(Bounded Dataset) 。
那流处理和批处理究竟该如何区分呢?下面这张图应该能帮助你快速且直观地理解它们的区别 。
本文插图
好了 , 现在我来详细解释一下流处理和批处理的区别 。
长期以来 , 流处理给人的印象通常是低延时 , 但是结果不准确 。 每来一条消息 , 它就能计算一次结果 , 但由于它处理的大多是无界数据 , 可能永远也不会结束 , 因此在流处理中 , 我们很难精确描述结果何时是精确的 。 理论上 , 流处理的计算结果会不断地逼近精确结果 。
但是 , 它的竞争对手批处理则正好相反 。 批处理能提供准确的计算结果 , 但往往延时很高 。
因此 , 业界的大神们扬长避短 , 将两者结合在一起使用 。 一方面 , 利用流处理快速地给出不那么精确的结果;另一方面 , 依托于批处理 , 最终实现数据一致性 。 这就是所谓的Lambda 架构 。
延时低是个很好的特性 , 但如果计算结果不准确 , 流处理是无法完全替代批处理的 。 所谓计算结果准确 , 在教科书或文献中有个专属的名字 , 叫正确性(Correctness) 。 可以这么说 , 目前难以实现正确性是流处理取代批处理的最大障碍 , 而实现正确性的基石是精确一次处理语义(Exactly Once Semantics , EOS) 。
这里的精确一次是流处理平台能提供的一类一致性保障 。 常见的一致性保障有三类:
至多一次(At most once)语义:消息或事件对应用状态的影响最多只有一次 。
至少一次(At least once)语义:消息或事件对应用状态的影响最少一次 。
精确一次(Exactly once)语义:消息或事件对应用状态的影响有且只有一次 。
注意 , 我这里说的都是对应用状态的影响 。 对于很多有副作用(Side Effect)的操作而言 , 实现精确一次语义几乎是不可能的 。 举个例子 , 假设流处理中的某个步骤是发送邮件操作 , 当邮件发送出去后 , 倘若后面出现问题要回滚整个流处理流程 , 已发送的邮件是没法追回的 , 这就是所谓的副作用 。 当你的流处理逻辑中存在包含副作用的操作算子时 , 该操作算子的执行是无法保证精确一次处理的 。 因此 , 我们通常只是保证这类操作对应用状态的影响精确一次罢了 。 后面我们会重点讨论 Kafka Streams 是如何实现 EOS 的 。
本文讨论的流处理既包含真正的实时流处理 , 也包含微批化(Microbatch)的流处理 。 所谓的微批化 , 其实就是重复地执行批处理引擎来实现对无限数据集的处理 。 典型的微批化实现平台就是Spark Streaming 。
Kafka Streams的特色
相比于其他流处理平台 , Kafka Streams 最大的特色就是它不是一个平台 , 至少它不是一个具备完整功能(Full-Fledged)的平台 , 比如其他框架中自带的调度器和资源管理器 , 就是 Kafka Streams 不提供的 。
推荐阅读
- 互联网|「微服务架构」Kafka和Moskitto那个更适合微服务之间的通信?
- |打造过硬中端机体验,放下买新不买旧想法,其实差异不明显
- 最前沿YOKO时尚资讯|行业风向:阿里巴巴犀有联合COLORO打造差异化的色彩大数据
- 云集|云集差异化供应链 筑起业务护城河
- |同一款SSD,搭配雷电3硬盘盒与安装在主板上的读写性能上差异多大
- 雷锋网|为付费用户提供差异化服务,Dropbox增添新功能
- 手机中国|将采用全面屏设计?网友爆料新款苹果iMac图标差异
- 界面新闻|交通运输部:持续深化ETC拓展应用,推广高速公路差异化收费
- Excel函数与VBA实例|Excel多列数据快速找差异,你加班1小时没完成,同事三招五秒搞定
