01 | 消息引擎系统ABC
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
Apache Kafka: 解耦异步数据传递的利器 Apache Kafka是一款开源的消息引擎系统,旨在实现系统间的松耦合异步数据传递。它通过消息队列和发布/订阅模型传输消息,同时支持JMS规范,主要用于“削峰填谷”,即缓冲上下游瞬时突发流量,使其更平滑,避免流量的震荡。Kafka使用纯二进制的字节序列作为消息格式,并具有点对点模型和发布/订阅模型的双重支持。引入Kafka后,上游系统不再直接与下游子服务进行交互,而是通过Kafka Broker发送和接收消息,实现了上游和下游服务的解耦,从而有效应对瞬时峰值流量。作者分享了对Kafka源代码的阅读经历,强调了“聪明人也要下死功夫”的重要性。这篇文章深入浅出地介绍了Kafka的特点和应用,对于想要快速了解消息引擎系统的读者来说,是一份有价值的技术概览。
《Kafka 核心技术与实战》,新⼈⾸单¥68
全部留言(121)
- 最新
- 精选
- 孙志强讲讲怎么把50完行源代码读下来的? 嘿嘿
作者回复: 一行一行啃下来的。如果你也有兴趣,我建议可以先从kafka.log包开始读起,会很有收获的~~
2019-06-04668 - 开发无止境,BUG随身行有个问题请教下老师: 之前也用过kafka,怎么解决实时结果响应问题呢?比如秒杀商品,生产者产生订单,消费者处理订单结果,那这结果如何实时返回给用户呢?
作者回复: 这个场景使用Kafka Streams比较适合,它就是为read-process-write场景服务的
2019-06-03260 - Lei Yang老师可以讲一讲Kafka和别的mq的区别和最佳选择方法么?例如什么时候选择RabbitMQ什么时候选择Kafka等等
作者回复: RabbitMQ属于比较传统的消息队列系统,支持标准的消息队列协议(AMQP, STOMP,MQTT等),如果你的应用程序需要支持这些协议,那么还是使用RabbitMQ。另外RabbitMQ支持比较复杂的consumer Routing,这点也是Kafka不提供的。
2019-06-03252 - Dovelol老师好,想问下有些业务用mq来做异步处理,为了削峰填谷,是不是上游发送消息成功就认为业务成功了,可能下游过很久去消费,那实时性要求很高的业务怎么办呢,比如生成了订单但是一直不处理也不好吧。另外想请教下老师的角度来讲下mq和rpc调用的区别是什么呢?
作者回复: mq和rpc的区别往大了说属于数据流模式(dataflow mode)的问题。我们常见的数据流有三种:1. 通过数据库;2. 通过服务调用(REST/RPC); 3. 通过异步消息传递(消息引擎,如Kafka) RPC和MQ是有相似之处的,毕竟我们远程调用一个服务也可以看做是一个事件,但不同之处在于: 1. MQ有自己的buffer,能够对抗过载(overloaded)和不可用场景 2. MQ支持重试 3. 允许发布/订阅模式 当然它们还有其他区别。应该这样说RPC是介于通过数据库和通过MQ之间的数据流模式。
2019-06-03551 - Shane老师,今天才学习到这篇文章,还是老师能够在百忙之中抽出时间来解答我的困惑。 这篇文章提到了消息的协议,老师这里介绍了两种模式一种是点对点,一种是订阅,发布模式。但是,为什么我一开始想到消息的协议是http之类的传输协议?这两个有什么区别和联系?
作者回复: http不属于消息传输协议,它是网络通信协议的一种,严格来说这是两个范畴或者说是两个层次上的协议。 通常来说,两个进程进行数据流交互的方式一般有三种: 1. 通过数据库:进程1写入数据库;进程2读取数据库 2. 通过服务调用:比如REST或RPC,而HTTP协议通常就作为REST方式的底层通讯协议 3. 通过消息传递的方式:进程1发送消息给名为broker的中间件,然后进程2从该broker中读取消息。消息传输协议属于这种模式 因此我说虽然我们都称它们为协议,但它们不是一个层次上的协议。
2019-06-14439 - jefferypulsar高吞吐低延迟和kafka谁会主宰未来?夕哥、能不能拓展下flink+kafka的耦合!谢谢
作者回复: 和Pulsar的斯杰、翟佳都相识,不敢妄下结论。Flink + Kafka最近的确有标准套餐的趋势:)
2019-06-03227 - 杨鹏程baci胡夕老师好,我是第一次在这提问,这门课程我应该是0基础了,有一些疑问希望老师帮忙解答一下,用消息引擎的这种数据流数据方式,上游是不是就无法得知处理结果了,甚至是无法将返回值传回上游了?谢谢!
作者回复: 嗯嗯,确实不太容易。因为这种通信方式一般是异步且是单向的,如果你需要这种回馈机制,最好使用服务调用 的方式
2019-06-20323 - gnayuh老师讲的很好,我是之前那种听过kafaka等消息引擎大名的初学者,听完第一节课,联想到这个发布订阅模型跟之前学过java设计模式之观察者,总感觉它们之间有那么点类似,想知道它们之间的某种关系。还有就是学操作系统时候的生产者消费者也很像
作者回复: 它们的确很类似。特别是发布/订阅与观察者模式。在《Head first Design Pattern》一书中更是有这样的话: Publishers + Subscribers = Observer Pattern 不过细究起来还是有些许不同,pub与sub之间通常都隔了一层,比如broker或message channel,但是Observer模式中Observer通常都直接对接被观测者,因此Pub/Sub模式中组件的耦合度更低;另外Pub/Sub经常是以异步的方式实现,而Observer模式通常都是同步的
2019-06-0322 - 燕子上我司直接把kafka当mq来使用,高吞吐、低延迟、松耦合。对!我司看上了松耦合,哪哪都要用kafka解耦,真正的面向kafka编程🤣
作者回复: 赞👍
2019-06-04221 - Bin滨谢谢知识分享。 在Martin Kleppmann 的书中把kafka 定义成 log-based message brocker, 这个基本上是对kafka最简单的定义了。append-only, partition, totally ordered 是比较需要理解的概念。
作者回复: 嗯嗯,DDIA是一本神书:) 其实这个定义最早还是Kafka作者Jay Kreps提出的,有兴趣可以看看Kafka的论文:http://notes.stephenholiday.com/Kafka.pdf 以及Jay Kreps的 《I ❤️ Logs》
2019-06-1917