Kafka 核心技术与实战
胡夕
Apache Kafka Committer,老虎证券技术总监
52815 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
开篇词 (1讲)
结束语 (1讲)
Kafka 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

03 | Kafka只是消息引擎系统吗?

社区的发展方向
Kafka未来的演进路线
分布式存储系统
优势:更容易实现端到端的正确性、自身对于流式计算的定位
定位:用于搭建实时流处理的客户端库
实现端到端的正确性
开源进程
设计初衷:提供API实现生产者和消费者、降低网络传输和磁盘存储开销、实现高伸缩性架构
解决方案:Kafka
问题:数据正确性不足、系统高度定制化、维护成本高
LinkedIn内部需求
流处理组件Kafka Streams
分布式、分区化、带备份功能的提交日志服务
分布式流处理平台
消息引擎系统
开放讨论
Kafka的其他用途
Kafka作为流处理平台的优势
Apache Kafka的发展历程
Kafka
Kafka只是消息引擎系统吗?

该思维导图由 AI 生成,仅供参考

你好,我是胡夕。今天我们来聊一个老生常谈的话题:Kafka 只是消息引擎系统吗?
要搞清楚这个问题,我们不可避免地要了解一下 Apache Kafka 的发展历程。有的时候我们会觉得说了解一个系统或框架的前世今生似乎没什么必要,直接开始学具体的技术不是更快更好吗?其实,不论是学习哪种技术,直接扎到具体的细节中,亦或是从一个很小的点开始学习,你很快就会感到厌烦。为什么呢?因为你虽然快速地搞定了某个技术细节,但无法建立全局的认知观,这会导致你只是在单个的点上有所进展,却没法将其串联成一条线进而扩展成一个面,从而实现系统地学习。
我这么说是有依据的,因为这就是我当初学习 Kafka 的方式。你可能不会相信,我阅读 Kafka 源码就是从 utils 包开始的。显然,我们不用看源码也知道这玩意是干什么用的,对吧?就是个工具类包嘛,而且这种阅读源码的方式是极其低效的。就像我说的,我是在一个点一个点地学习,但全部学完之后压根没有任何感觉,依然不了解 Kafka,因为不知道这些包中的代码组合在一起能达成什么效果。所以我说它是很低效的学习方法。
后来我修改了学习的方法,转而从自上而下的角度去理解 Kafka,竟然发现了很多之前学习过程中忽略掉的东西。更特别的是,我发现这种学习方法能够帮助我维持较长时间的学习兴趣,不会阶段性地产生厌烦情绪。特别是在了解 Apache Kafka 整个发展历史的过程中我愉快地学到了很多运营大型开源软件社区的知识和经验,可谓是技术之外的一大收获。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kafka:从消息引擎到分布式流处理平台 Kafka不仅是一款强大的消息引擎系统,更是一个多功能的分布式流处理平台。文章首先介绍了Kafka的发展历程,强调了全局角度理解Kafka的重要性。随后详细阐述了Kafka在LinkedIn内部应用的背景和解决的问题,以及其作为消息引擎系统的初衷。随着不断完善,Kafka逐渐演变为分布式流处理平台,并推出了流处理组件Kafka Streams。相较于其他大数据流式计算框架,Kafka的优势在于实现端到端的正确性和其定位为一个用于搭建实时流处理的客户端库。文章最后展望了Kafka流处理平台的前景,并对其优势进行了深入分析。 参考文章还指出,Kafka除了作为消息引擎和流处理平台外,还可以用作分布式存储系统。作者强调了Kafka从一个优秀的消息引擎系统逐渐演变成分布式流处理平台的观点。因此,读者不仅需要熟练掌握Kafka作为消息引擎系统的特性和使用技巧,还应该多了解其流处理组件的设计与案例应用。这一观点为读者提供了更深入的思考和学习方向。 总之,本文全面介绍了Kafka的技术特点和发展历程,对于想要快速了解Kafka的读者具有重要的参考价值。文章展望了Kafka流处理平台的前景,并对其优势进行了深入分析,为读者提供了更深入的思考和学习方向。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Kafka 核心技术与实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(48)

  • 最新
  • 精选
  • Michael 🛡YZY
    学到了。刚接触, 对一次性处理语义的概念和背后的含义不太明确, 能否结合实例讲解比较一下…

    作者回复: 举个例子,如果我们使用Kafka计算某网页的PV——我们将每次网页访问都作为一个消息发送的Kafka。PV的计算就是我们统计Kafka总共接收了多少条这样的消息即可。精确一次处理语义表示每次网页访问都会产生且只会产生一条消息,否则有可能产生多条消息或压根不产生消息。

    2019-06-08
    3
    75
  • October
    对于kafka streams相对于其他大数据流式计算框架的优势的第一点不是特别理解。spark或者flink读取消息之后再写回kafka,可能会导致多次写入kafka,老师能不能解释一下什么情况下会多次写入kafka?

    作者回复: 不用拿Flink或Spark举例。我们就说一个普通的producer程序:producer需要接收到broker发送的response才能认为发送成功,如果response在传输过程中因为网络抖动丢失了或超时了(这种情况非常常见)而broker实际上已经写入了该消息,那么producer就会认为发送失败从而尝试重新发送,这就可能造成同一条消息被发送了多次。

    2019-06-17
    11
    66
  • 清晨吼于林
    老师您好~~~ 我了解的:一个partition在一个group内,只能被一个消息者进程消费(一个jvm,启动了一个java进程)。 问题前提:经过分区算法的匹配,A partition 被 B 消费者 消费。 我的问题:在这个B的消费者里面,假如我用多线程消费(多个线程,每个线程维护了一个KafkaConsumer实例。 而不是一个KafkaConsumer然后多个worker线程消费的模式),那这多个线程都能从这个A partition里面取到消息嘛?

    作者回复: 同一个组下有多少消费者实例不是看进程数或线程数,而是看创建的KafkaConsumer实例数。所以在你的场景中,B消费者不是一个,而是多个,因为B进程启动了多个线程,而每个线程都维护了单独的KafkaConsumer实例。

    2019-06-12
    2
    26
  • DarKnight
    胡老师您好!我对于第一点优势那个例子不是很懂,但又很感兴趣。我能否用一个这样的情形去理解呢: 我在spark内部consume了一条数据并要进行有状态的计算,我可以通过roll back确保做到exactly once,当状态计算过程中可以通过捕捉exception从而roll back到初始状态,但状态计算过程中我可能已经将某些结果发送到kafka了(这些结果我并不想重复发送),虽然我可以roll back所有处于spark内部的数据状态,但发送到kafka的所有数据就已经收不回了。 不知道这个例子算不算一种解读呢?谢谢!

    作者回复: 嗯嗯,在Spark看来,写入Kafka是一种side effect,它无法控制。所以它无法实现端到端的EOS。Flink 1.4借助了Kafka提供的事务机制来保证E2E EOS,但是没听说Spark也做了这样的改进。

    2019-06-27
    2
    19
  • 课前思考 kafka除了可以作为一个消息引擎系统,还能用来干什么?这个还真不太清楚,它的核心功能不就是,将消息倒一道手嘛? 课后思考 1:kafka可以作为什么来使用? 1-1:一个分布式消息引擎系统——广泛使用 1-2:一个分布式流处理平台,可以和Storm/Spark/Flink相媲美——越来越多这么玩,根据老师的评论回复,感觉kafka更是一个分布式流处理库。 1-3:一个分布式存储系统——很少使用,关键增删改查的效率好不?如果挺好,也可以这么玩吧! 如果我是kafka的掌舵人,我会逐渐丰富kafka的生态圈,把kafka弄得和Spring全家桶类似,以后的ABC把kafka家族的程员作为标配。 2:啥是流处理? 是指实时处理无限数据集的数据的一种处理方式嘛? 3:啥是批处理? 是指一次处理一批数据,且此数据的集合是有限的? 4:流处理和批处理,没理解,kafka作为分布式流处理平台的优势也没理解?看评论,流处理的数据集是无限数据集,那岂不是永远处理不完,直到天荒地老? 5:数据正确性不足是什么意思?会丢数据?没明白和数据收集的方式的逻辑是什么? 计算机我的理解,就是处理数据的,处理数据无非是针对数据的存储转发增删改查存分析统计,然后就是挖空心思加快速度。 感觉不该如此难以理解😊,一图胜千言,希望后面看到老师有图有真相。

    作者回复: 嗯嗯,记下了您的建议

    2019-08-11
    17
  • 平叔叔
    在这样的需求之下,搭建重量级的完整性平台实在是“杀鸡焉用牛刀,的意思中小企业使用Kafka 不用配套提供集群调度、弹性部署?

    作者回复: 你不要搭建多套这样重量级的系统,只需要一套Kafka集群就可以。并不是说Kafka集群不需要运维管理

    2019-09-22
    7
  • Shane
    老师,能举个例子说明下流出来和批处理的区别吗? 目前我的理解就是批处理是一次请求中包含多条消息?然后消费者取出这一整个请求内容进行处理消费。流处理就是每个请求每次只发送一条消息,所以消费者也只能每次消费一条? 感觉自己理解的应该不怎么正确呢?网络上的解释也是非常虚,想看看老师有啥指导的吗?

    作者回复: 流处理和批处理的区别是前者主要用于处理无限数据集(unbound data set)

    2019-06-15
    2
    7
  • 你好旅行者
    关于【但是计算结果有可能多次写入到 Kafka,因为它们不能控制 Kafka的语义处理】。我想问老师,Kafka不是在0.11版本实现了exactly once,保证一条消息只会被消费一次吗,为什么说计算结果还有可能会被多次写入到Kafka呢?

    作者回复: 嗯嗯,这说的就是0.11之前的故事。事实上,Apache Flink从1.4开始推出了支持E2E Exactly-Once语义的两阶段SinkFunction。它用的就是Kafka 0.11的事务

    2019-06-12
    7
  • EricJones
    我又仔细意会了一下,流处理大概已经懂了,但是批处理的正确性到底体现在哪里。还是不知道。

    作者回复: 假设我们统计单词计数。如果不出现问题,对于相同的有限输入(bounded dataset)批处理是不是总是能够得到相同的输出?

    2019-06-22
    5
  • 东方奇骥
    老师,请问一下,kafka相比于rabbitmq和activemq作为消息引擎系统的优势是什么呢。就是文中所说的消息正确性吗?

    作者回复: 如果和rabbitmq和activemq相比,Kafka还是以消息引擎的角色。目前Kafka消息引擎单方面只能提供at least once处理语义,无法实现精确一次的消息交付语义。 另外,正确性一般用在数据计算领域。在消息引擎中我们更多的是谈它的消息交付语义(message delivery semantics)

    2019-06-16
    3
    5
收起评论
显示
设置
留言
48
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部