前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >kafka stream简要分析

kafka stream简要分析

作者头像
大数据和云计算技术
发布于 2018-03-08 08:37:48
发布于 2018-03-08 08:37:48
1.3K0
举报

kafka历史背景

Kafka是2010年Kafka是Linkedin于2010年12月份开源的消息系统,我接触的不算早,大概14年的时候,可以看看我们14年写的文章《高速总线kafka介绍》。

消息总线一直是作IT系统集成的核心概念,IBM/oracle等传统厂商都有相关中间件产品。传统消息中间件解决是消息的传输,一般支持AMQP协议来实现,如RabbitMQ。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

Kafka上来剑走偏锋,追求高吞吐量,所以特别适合,大数据的数据收集和分发等功能。高吞吐的原因核心是kafka的一些独特的涉及,包括直接使用linux cache/zero-copy/数据存放方法等,这方面的分析很多,我前面的文章《高速总线kafka介绍》第4节也简单写了下。Kafka一直缺乏一个商业公司来推动,所以发展并不是很快。几年过去了,自己看了看,还是0.10版本,特性也发展比较慢。

Kafka一直缺乏一个商业公司来推动,这个问题现在要稍稍改变一些了,原LinkedIn Kafka作者离职后创业Confluent Inc来推动kafka商业化,并推出Kafka Stream。

详细的设计理念,概念,大家看看slidershare上的PPT,讲的比较清楚,不详细展开了:https://www.slideshare.net/GuozhangWang/introduction-to-kafka-streams。

kafka stream

今天只讲kafka stream几个有意思的点:

1、首先是定位:

比较成熟度的框架有:Apache Spark, Storm(我们公司开源Jstorm), Flink, Samza 等。第三方有:Google’s DataFlow,AWS Lambda。

1)现有框架的好处是什么?

强大计算能力,例如Spark Streaming上已经包含Graph Compute,MLLib等适合迭代计算库,在特定场景中非常好用。

2)问题是什么?

A、使用起来比较复杂,例如将业务逻辑迁移到完备的框架中,Spark RDD,Spout等。有一些工作试图提供SQL等更易使用模式降低了开发门槛,但对于个性化ETL工作(大部分ETL其实是不需要重量级的流计算框架的)需要在SQL中写UDF,流计算框架就退化为一个纯粹的容器或沙箱。

B、作者认为部署Storm,Spark等需要预留集群资源,对开发者也是一种负担。

Kafka Stream定位是轻量级的流计算类库,简单体现在什么方面?

C、所有功能放在Lib中实现,实现的程序不依赖单独执行环境

D、可以用Mesos,K8S,Yarn和Ladmda等独立调度执行Binary,试想可以通过Lamdba+Kafka实现一个按需付费、并能弹性扩展的流计算系统,是不是很cool?

E、可以在单、单线程、多线程进行支持

F、在一个编程模型中支持Stateless,Stateful两种类型计算

编程模型比较简洁,基于Kafka Consumer Lib,及Key-Affinity特性开发,代码只要处理执行逻辑就可以,Failover和规模等问题由Kafka本身特性帮助解决。

2、设计理念和概念抽象

强调简单化,Partition中的数据到放入消费队列之前进行一定的逻辑处理(Processor Topology)提供一定的数据处理能力(api),没有Partition之间的数据交换,实现代码9K行。

数据抽象分两种:

1)KStream:data as record stream, KStream为一个insert队列,新数据不断增加进来

2)KTable: data as change log stream, KTable为一个update队列,新数据和已有数据有相同的key,则用新数据覆盖原来的数据

后面的并发,可靠性,处理能力都是围绕这个数据抽象来搞。

3、支持两种处理能力

1)Stateless(无状态):例如Filter,Map,Joins,这些只要数据流过一遍即可,不依赖于前后的状态。

2)Stateful(有状态):主要是基于时间Aggregation,例如某段时间的TopK,UV等,当数据达到计算节点时需要根据内存中状态计算出数值。

Kafka Streams把这种基于流计算出来的表存储在一个本地数据库中(默认是RocksDB,但是你可以plugin其它数据库)

4、未来支持exactly once

未来0.11版本会支持exactly once ,这是比较牛逼的能力。(提前预告)

https://www.confluent.io/blog/exactly-once-semantics-are-possible-heres-how-apache-kafka-does-it/

1)at most once: 消费者fetch消息,保存offset,处理消息

消费者处理消息过程中出现意外,消费者恢复之后,将不能恢复处理出错的消息

2)at least once: 消费者fetch消息,处理消息,保存offset

消费者处理消息过程中出现意外,可以恢复之后再重新读取offsert处的原来的消息

3)exactly once: 确保消息唯一消费一次,这个是分布式流处理最难的部分。“processing.guarantee=exactly_once”

这个是怎么实现的,去看看《分布式系统的一致性探讨

》http://blog.jobbole.com/95618/

和《关于分布式事务、两阶段提交协议、三阶提交协议》http://blog.jobbole.com/95632/。

5、主要应用场景

kafka的核心应用场景还是轻量级ETL,和flink/storm更多是一个补充作用。

Building a Real-Time Streaming ETL Pipeline in 20 Minutes

https://www.confluent.io/blog/building-real-time-streaming-etl-pipeline-20-minutes/

最后希望kafka在商业公司的推动下有个更大的发展:)。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-07-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据和云计算技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Kafka设计解析(七)- Kafka Stream
Kafka Stream背景 Kafka Stream是什么 Kafka Stream是Apache Kafka从0.10版本引入的一个新Feature。它是提供了对存储于Kafka内的数据进行流式处理和分析的功能。 Kafka Stream的特点如下: Kafka Stream提供了一个非常简单而轻量的Library,它可以非常方便地嵌入任意Java应用中,也可以任意方式打包和部署 除了Kafka外,无任何外部依赖 充分利用Kafka分区机制实现水平扩展和顺序性保证 通过可容错的state store实
Jason Guo
2018/06/20
2.3K2
Kafka核心API——Stream API
Kafka Stream是Apache Kafka从0.10版本引入的一个新Feature,它提供了对存储于Kafka内的数据进行流式处理和分析的功能。简而言之,Kafka Stream就是一个用来做流计算的类库,与Storm、Spark Streaming、Flink的作用类似,但要轻量得多。
端碗吹水
2020/09/23
3.7K0
Kafka核心API——Stream API
介绍一位分布式流处理新贵:Kafka Stream
来源:CSDN大数据 本文长度为2609字,建议阅读6分钟 本文为你全面解析流式数据系统Kafka Stream。 本文介绍了Kafka Stream的背景,如Kafka Stream是什么,什么是流式计算,以及为什么要有Kafka Stream。接着介绍了Kafka Stream的整体架构,并行模型,状态存储,以及主要的两种数据集KStream和KTable。并且分析了Kafka Stream如何解决流式系统中的关键问题,如时间定义,窗口操作,Join操作,聚合操作,以及如何处理乱序和提供容错能力。最
数据派THU
2018/01/29
10K1
介绍一位分布式流处理新贵:Kafka Stream
【首席架构师看Event Hub】Kafka深挖 -第2部分:Kafka和Spring Cloud Stream
在这个博客系列的第1部分之后,Apache Kafka的Spring——第1部分:错误处理、消息转换和事务支持,在这里的第2部分中,我们将关注另一个增强开发者在Kafka上构建流应用程序时体验的项目:Spring Cloud Stream。
架构师研究会
2019/10/23
2.6K0
【首席架构师看Event Hub】Kafka深挖 -第2部分:Kafka和Spring Cloud Stream
最简单流处理引擎——Kafka Streams简介
Kafka在0.10.0.0版本以前的定位是分布式,分区化的,带备份机制的日志提交服务。而kafka在这之前也没有提供数据处理的顾服务。大家的流处理计算主要是还是依赖于Storm,Spark Streaming,Flink等流式处理框架。
用户6070864
2019/09/05
1.6K0
最简单流处理引擎——Kafka Streams简介
Kafka入门实战教程(7):Kafka Streams
流处理平台(Streaming Systems)是处理无限数据集(Unbounded Dataset)的数据处理引擎,而流处理是与批处理(Batch Processing)相对应的。所谓的无线数据,指的是数据永远没有尽头。而流处理平台就是专门处理这种数据集的系统或框架。下图生动形象地展示了流处理和批处理的区别:
Edison Zhou
2022/09/09
4.2K0
Kafka入门实战教程(7):Kafka Streams
Kafka生态
Confluent提供了业界唯一的企业级事件流平台,Confluent Platform通过将来自多个源和位置的数据集成到公司的单个中央事件流平台中,可以轻松构建实时数据管道和流应用程序。Confluent平台使您可以专注于如何从数据中获取业务价值,而不必担心诸如在各种系统之间传输或处理数据的基本机制。具体来说,Confluent平台简化了将数据源连接到Kafka,使用Kafka构建应用程序以及保护,监视和管理Kafka基础架构的过程。
35岁程序员那些事
2020/02/24
3.9K0
[Spring Cloud]Stream组件介绍
SCS 在 3.x 做了很大的改动,废除了诸如 @StreamListener、@Input、@Output 等类,保留了 Binder、Binding,并提供了批量消费的支持。 本着学新不学旧的原则,本文将介绍 SCS 3.x 相关内容。 由于关于 spring cloud stream kafka 的文档比较充足,本文就此为例介绍 SCS。
宇宙无敌暴龙战士之心悦大王
2023/03/14
4.6K0
Heron:来自Twitter的新一代流处理引擎应用篇
作者 | 吴惠君,吕能,符茂松 责编 | 郭芮 【导语】本文对比了Heron和常见的流处理项目,包括Storm、Flink、Spark Streaming和Kafka Streams,归纳了系统选型的要点。此外实践了Heron的一个案例,以及讨论了Heron在这一年开发的新特性。 在今年6月期的“基础篇”中,我们通过学习Heron[1][2][3]的基本概念、整体架构和核心组件等内容,对Heron的设计、运行等方面有了基本的了解。在这一期的“应用篇”中,我们将Heron与其他流行的实时流处理系统(Apach
企鹅号小编
2018/01/26
1.6K0
Kafka Streams 核心讲解
•Kafka Stream 提供了一个非常简单而轻量的 Library,它可以非常方便地嵌入任意Java应用中,也可以任意方式打包和部署•除了 Kafka 外,无任何外部依赖•充分利用 Kafka 分区机制实现水平扩展和顺序性保证•通过可容错的 state store 实现高效的状态操作(如 windowed join 和aggregation)•支持正好一次处理语义•提供记录级的处理能力,从而实现毫秒级的低延迟•支持基于事件时间的窗口操作,并且可处理晚到的数据(late arrival of records)•同时提供底层的处理原语 Processor(类似于 Storm 的 spout 和 bolt),以及高层抽象的DSL(类似于 Spark 的 map/group/reduce)
java达人
2021/06/21
2.7K0
Kafka Streams 核心讲解
Kafka 是否可以用做长期数据存储?
问题 “把 Kafka 作为长期存储有问题吗?” 这是一个非常常见的问题,我们知道,Kafka 是这样存储日志记录的 答案是“可以”,只要把数据保留时间设置为“永久”,或者开启日志压缩,数据就会被一直
dys
2018/04/04
3.2K0
Kafka 是否可以用做长期数据存储?
Kafka 工作机制
Kafka 是 Apache 的子项目,是一个高性能跨语言的分布式发布/订阅消息队列系统(没有严格实现 JMS 规范的点对点模型,但可以实现其效果),在企业开发中有广泛的应用。高性能是其最大优势,劣势是消息的可靠性(丢失或重复),这个劣势是为了换取高性能,开发者可以以稍降低性能,来换取消息的可靠性。
IT技术小咖
2019/06/26
1.2K0
Kafka 工作机制
kafka stream word count实例
kafka呢其实正道不是消息队列,本质是日志存储系统,而stream processing是其最近大力推广的特性,本文简单介绍下word count的实例。
code4it
2018/09/17
1K0
031. Kafka 入门及使用
1. 简介 ---- Kafka 是 LinkedIn 使用 Scala 编写具有高水平扩展和高吞吐量的分布式消息系统。 Kafka 对消息保存时根据 Topic 进行归类,发送消息者称为 producer,消息接收者称为 consumer,此外 Kafka 集群有多个 Kafka 实例组成,每个实例(server)称为 broker。 无论是 Kafka 集群,还是 producer 和 consumer 都依赖于 zookeeper 来保证系统可用性,为集群保存一些 meta 信息。
山海散人
2021/03/03
4600
031. Kafka 入门及使用
【数据采集与预处理】数据接入工具Kafka
1、点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除) 点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息推送到客户端。这个模型的特点是发送到队列的消息被一个且只有一个接收者接收处理,即使有多个消息监听者也是如此。
Francek Chen
2025/01/22
880
【数据采集与预处理】数据接入工具Kafka
【译】使用Apache Kafka构建流式数据平台(1)何为流式数据平台?
前言:前段时间接触过一个流式计算的任务,使用了阿里巴巴集团的JStorm,发现这个领域值得探索,就发现了这篇文章——Putting Apache Kafka To Use: A Practical Guide to Building a Stream Data Platform(Part 1)。在读的过程中半总结半翻译,形成本文,跟大家分享。
阿杜
2018/08/06
1.2K0
【译】使用Apache Kafka构建流式数据平台(1)何为流式数据平台?
Kafka Streams之WordCount
(1)Stream 从topic中取出每一条数据记录 (<key, value>格式): <null, “Spark and spark”>
全栈程序员站长
2022/11/16
6170
Mysql实时数据变更事件捕获kafka confluent之debezium
如果你的后端应用数据存储使用的MySQL,项目中如果有这样的业务场景你会怎么做呢?
XING辋
2019/03/26
3.5K0
Mysql实时数据变更事件捕获kafka confluent之debezium
Kafka Stream(KStream) vs Apache Flink
腾讯云流计算 Oceanus 是大数据实时化分析利器,兼容 Apache Flink 应用程序。新用户可以 1 元购买流计算 Oceanus(Flink) 集群,欢迎读者们体验使用。
吴云涛
2021/11/28
4.9K0
Kafka Stream(KStream) vs Apache Flink
Kafka Streams - 抑制
在这篇文章中,我将解释Kafka Streams抑制的概念。尽管它看起来很容易理解,但还是有一些内在的问题/事情是必须要了解的。这是我上一篇博文CDC分析的延续。
大数据学习与分享
2022/12/12
1.6K0
Kafka Streams - 抑制
相关推荐
Kafka设计解析(七)- Kafka Stream
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档