Kafka核心技术与实战
胡夕
人人贷计算平台部总监,Apache Kafka Contributor
立即订阅
8408 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么要学习Kafka?
免费
Kafka入门 (5讲)
01 | 消息引擎系统ABC
02 | 一篇文章带你快速搞定Kafka术语
03 | Kafka只是消息引擎系统吗?
04 | 我应该选择哪种Kafka?
05 | 聊聊Kafka的版本号
Kafka的基本使用 (3讲)
06 | Kafka线上集群部署方案怎么做?
07 | 最最最重要的集群参数配置(上)
08 | 最最最重要的集群参数配置(下)
客户端实践及原理剖析 (14讲)
09 | 生产者消息分区机制原理剖析
10 | 生产者压缩算法面面观
11 | 无消息丢失配置怎么实现?
12 | 客户端都有哪些不常见但是很高级的功能?
13 | Java生产者是如何管理TCP连接的?
14 | 幂等生产者和事务生产者是一回事吗?
15 | 消费者组到底是什么?
16 | 揭开神秘的“位移主题”面纱
17 | 消费者组重平衡能避免吗?
18 | Kafka中位移提交那些事儿
19 | CommitFailedException异常怎么处理?
20 | 多线程开发消费者实例
21 | Java 消费者是如何管理TCP连接的?
22 | 消费者组消费进度监控都怎么实现?
深入Kafka内核 (5讲)
23 | Kafka副本机制详解
24 | 请求是怎么被处理的?
25 | 消费者组重平衡全流程解析
26 | 你一定不能错过的Kafka控制器
27 | 关于高水位和Leader Epoch的讨论
管理与监控 (12讲)
28 | 主题管理知多少?
29 | Kafka动态配置了解下?
30 | 怎么重设消费者组位移?
31 | 常见工具脚本大汇总
32 | KafkaAdminClient:Kafka的运维利器
33 | Kafka认证机制用哪家?
34 | 云环境下的授权该怎么做?
35 | 跨集群备份解决方案MirrorMaker
36 | 你应该怎么监控Kafka?
37 | 主流的Kafka监控框架
38 | 调优Kafka,你做到了吗?
39 | 从0搭建基于Kafka的企业级实时日志流处理平台
高级Kafka应用之流处理 (3讲)
40 | Kafka Streams与其他流处理平台的差异在哪里?
41 | Kafka Streams DSL开发实例
42 | Kafka Streams在金融领域的应用
结束语 (1讲)
结束语 | 以梦为马,莫负韶华!
特别放送 (2讲)
加餐 | 搭建开发环境、阅读源码方法、经典学习资料大揭秘
用户故事 | 黄云:行百里者半九十
Kafka核心技术与实战
登录|注册

01 | 消息引擎系统ABC

胡夕 2019-06-04
你好,我是胡夕。欢迎你来到“Kafka 核心技术与实战”专栏。如果你对 Kafka 及其背后的消息引擎、流处理感兴趣,很高兴我们可以在此相聚,并在未来的一段日子里一同学习有关 Kafka 的方方面面。
毫无疑问,你现在对 Apache Kafka 一定充满了各种好奇,那么今天就允许我先来尝试回答下 Kafka 是什么这个问题。对了,先卖个关子,在下一期我还将继续回答这个问题,而且答案是不同的。那么,Kafka 是什么呢?用一句话概括一下:Apache Kafka 是一款开源的消息引擎系统
倘若“消息引擎系统”这个词对你来说有点陌生的话,那么“消息队列”“消息中间件”的提法想必你一定是有所耳闻的。不过说实话我更愿意使用消息引擎系统这个称谓,因为消息队列给出了一个很不明确的暗示,仿佛 Kafka 是利用队列的方式构建的;而消息中间件的提法有过度夸张“中间件”之嫌,让人搞不清楚这个中间件到底是做什么的。
像 Kafka 这一类的系统国外有专属的名字叫 Messaging System,国内很多文献将其简单翻译成消息系统。我个人认为并不是很恰当,因为它片面强调了消息主体的作用,而忽视了这类系统引以为豪的消息传递属性,就像引擎一样,具备某种能量转换传输的能力,所以我觉得翻译成消息引擎反倒更加贴切。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Kafka核心技术与实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(68)

  • huaweichen
    曾国藩:真正聪明人都在下笨功夫!

    https://zhuanlan.zhihu.com/p/25100394
    2019-06-04
    1
    39
  • Lei Yang
    老师可以讲一讲Kafka和别的mq的区别和最佳选择方法么?例如什么时候选择RabbitMQ什么时候选择Kafka等等

    作者回复: RabbitMQ属于比较传统的消息队列系统,支持标准的消息队列协议(AMQP, STOMP,MQTT等),如果你的应用程序需要支持这些协议,那么还是使用RabbitMQ。另外RabbitMQ支持比较复杂的consumer Routing,这点也是Kafka不提供的。

    2019-06-03
    1
    20
  • 开发无止境,BUG随身行
    有个问题请教下老师:
    之前也用过kafka,怎么解决实时结果响应问题呢?比如秒杀商品,生产者产生订单,消费者处理订单结果,那这结果如何实时返回给用户呢?

    作者回复: 这个场景使用Kafka Streams比较适合,它就是为read-process-write场景服务的

    2019-06-03
    20
  • 孙志强
    讲讲怎么把50完行源代码读下来的? 嘿嘿

    作者回复: 一行一行啃下来的。如果你也有兴趣,我建议可以先从kafka.log包开始读起,会很有收获的~~

    2019-06-04
    17
  • jeffery
    pulsar高吞吐低延迟和kafka谁会主宰未来?夕哥、能不能拓展下flink+kafka的耦合!谢谢

    作者回复: 和Pulsar的斯杰、翟佳都相识,不敢妄下结论。Flink + Kafka最近的确有标准套餐的趋势:)

    2019-06-03
    16
  • 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-03
    14
  • paradox
    1. consesus algorithm,在区块链中多翻译为共识算法,而在其它领域多被翻译为一致性算法,个人觉得共识算法表意更清楚。

    2. 削峰填谷,实际上就是流量整形的形象表达,主要还是为了应对上游瞬时大流量的冲击,避免出现流量毛刺现象,保护下游应用和数据库不被大流量打垮。
    2019-06-03
    11
  • 安不安生
    我们公司用来传输视频切片,然后使用集群进行视频分析,之前曾经用过kafka ,因为没有人熟悉,不会维护,导致放弃,现在使用aws kinesis 服务,怎么才能说服领导引进kafka 呢?

    作者回复: hmmm... 使用Kafka自己把控度会高一些。另外很多公司对数据出公网是有顾虑的,使用云上的服务必然涉及到将 公司数据传给云服务器的问题。如果是敏感数据这也是要考虑的

    2019-06-03
    6
  • 杨鹏程baci
    胡夕老师好,我是第一次在这提问,这门课程我应该是0基础了,有一些疑问希望老师帮忙解答一下,用消息引擎的这种数据流数据方式,上游是不是就无法得知处理结果了,甚至是无法将返回值传回上游了?谢谢!

    作者回复: 嗯嗯,确实不太容易。因为这种通信方式一般是异步且是单向的,如果你需要这种回馈机制,最好使用服务调用 的方式

    2019-06-20
    5
  • Shane
    老师,今天才学习到这篇文章,还是老师能够在百忙之中抽出时间来解答我的困惑。
    这篇文章提到了消息的协议,老师这里介绍了两种模式一种是点对点,一种是订阅,发布模式。但是,为什么我一开始想到消息的协议是http之类的传输协议?这两个有什么区别和联系?

    作者回复: http不属于消息传输协议,它是网络通信协议的一种,严格来说这是两个范畴或者说是两个层次上的协议。

    通常来说,两个进程进行数据流交互的方式一般有三种:
    1. 通过数据库:进程1写入数据库;进程2读取数据库
    2. 通过服务调用:比如REST或RPC,而HTTP协议通常就作为REST方式的底层通讯协议
    3. 通过消息传递的方式:进程1发送消息给名为broker的中间件,然后进程2从该broker中读取消息。消息传输协议属于这种模式

    因此我说虽然我们都称它们为协议,但它们不是一个层次上的协议。

    2019-06-14
    2
    5
  • kaiux
    Kafka官网的描述是“Apache Kafka® is a distributed streaming platform.”,我觉得这里的重点在于分布式和流式处理,而且我认为消息引擎也可以看做是流式处理的一种,不知道老师怎么看?

    作者回复: Kafka是以消息引擎起家的,后面转型成流处理平台。没有冒犯的意思,我不认为消息引擎是流处理的一种。事实上,流处理在意的是如何处理无限数据集的问题。它们是不同的领域:)

    2019-06-03
    5
  • 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-19
    4
  • JAJAJA
    我们公司用kafaka通过埋点,日志分析,做链路监控,某个业务接口出现问题,预警系统发送消息给处理人。很及时有效,不用等运维那么慢的反馈了。合作方对比处理效率也很满意。
    2019-06-07
    4
  • 吃饭饭
    胡老师好,我想请教一个学习方法,我在做Kafka测试的时候遇到一个问题,我记得以前老版本的时候使用命令行进行Demo测试时,消费消息到控制台使用:bin/kafka-console-consumer.sh --zookeeper localhost:2181/kafka --topic test 就可以,但是今天我换了高版本发现不对了,以前的 --zookeeper 新版本不支持了。知道这点后我希望能够从官网找到具体是哪个版本开始删除这个指令的以及删除的原因,但是我这种为题我不会查询官网,只能从百度等搜索引擎上看其他人的一些总结,希望老师能给示例一番,感谢。

    作者回复: 指定--zookeeper是老版本的消费者,新版本需要指定--bootstrap-server。新版本消费者API是0.9版本引入的,主要是为了移除消费者API对ZooKeeper的依赖。专栏后面有文章谈到这一点。
    新版本使用方法:
    bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test

    2019-06-03
    4
  • 清晨吼于林
    1、A系统为什么不能直接把消息发送给B系统? 这可以出一个面试题,😆
    2、作者的学习经历确实让人很振奋,可不可以花一个章节,专门讲讲,你当时是怎么读kafka的源码的?🙏
    2019-06-11
    3
  • niemo
    我们公司使用kafka做不同数据库之间的准实时同步
    2019-06-10
    3
  • 燕子上
    我司直接把kafka当mq来使用,高吞吐、低延迟、松耦合。对!我司看上了松耦合,哪哪都要用kafka解耦,真正的面向kafka编程🤣

    作者回复: 赞👍

    2019-06-04
    3
  • 丁满和彭彭
    老师,卡夫卡的消息超过了log.retention.bytes以后可以拒绝生产者的消息么,现在默认好像直接删除

    作者回复: 不能拒绝。这个是留存策略。一旦超过阈值开启老消息删除,而不是拒绝新消息。

    2019-06-27
    2
  • dream
    老师能不能分享一下,kafka作为消息引擎(不考虑流式处理),对比其他消息引擎的优势,什么时候用kafka,什么时候用Active MQ等消息引擎?

    作者回复: Active MQ属于传统的消息中间件,支持传统的消息传输协议(AMQP, STOMP, MQTT),而且这些传统中间件(比如RabbitMQ)都支持比较复杂的消息路由,这些都是Kafka不具备的。如果你的应用要支持这些协议或者是用于SOA中的应用互联,那么这些传统消息中间件比较合适。

    反观Kafka还是在大数据场景下孕育的框架,如果你的场景都是大数据方面的,可以考虑使用Kafka。

    2019-06-22
    1
    2
  • Geek_91f197
    文中错误,Facebook的avro,不应该是thrift ?

    作者回复: 嗯嗯,是的,已提交勘误。谢谢您的反馈:)

    2019-06-10
    2
收起评论
68
返回
顶部