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

02 | 一篇文章带你快速搞定Kafka术语

Rebalance
Consumer Group
Consumer Offset
Consumer
Producer
追随者副本
领导者副本
Replica
Offset
Partition
Topic
Record
重平衡
消费者组
消费者位移
消费者
生产者
副本
消息位移
分区
主题
消息
Kafka术语知识关系脑图

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

你好,我是胡夕。今天我们正式开启 Apache Kafka 学习之旅。
在 Kafka 的世界中有很多概念和术语是需要你提前理解并熟练掌握的,这对于后面你深入学习 Kafka 各种功能和特性将大有裨益。下面我来盘点一下 Kafka 的各种术语。
在专栏的第一期我说过 Kafka 属于分布式的消息引擎系统,它的主要功能是提供一套完备的消息发布与订阅解决方案。在 Kafka 中,发布订阅的对象是主题(Topic),你可以为每个业务、每个应用甚至是每类数据都创建专属的主题。
向主题发布消息的客户端应用程序称为生产者(Producer),生产者程序通常持续不断地向一个或多个主题发送消息,而订阅这些主题消息的客户端应用程序就被称为消费者(Consumer)。和生产者类似,消费者也能够同时订阅多个主题的消息。我们把生产者和消费者统称为客户端(Clients)。你可以同时运行多个生产者和消费者实例,这些实例会不断地向 Kafka 集群中的多个主题生产和消费消息。
有客户端自然也就有服务器端。Kafka 的服务器端由被称为 Broker 的服务进程构成,即一个 Kafka 集群由多个 Broker 组成,Broker 负责接收和处理客户端发送过来的请求,以及对消息进行持久化。虽然多个 Broker 进程能够运行在同一台机器上,但更常见的做法是将不同的 Broker 分散运行在不同的机器上,这样如果集群中某一台机器宕机,即使在它上面运行的所有 Broker 进程都挂掉了,其他机器上的 Broker 也依然能够对外提供服务。这其实就是 Kafka 提供高可用的手段之一。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Apache Kafka是一个分布式的消息引擎系统,为消息发布与订阅提供了完备的解决方案。本文详细介绍了Kafka的核心概念和术语,帮助读者快速了解其特点。主题、生产者、消费者、Broker、副本、分区、消费者组等术语被详细解释,展现了Kafka的功能和架构。Kafka的服务器端由多个Broker组成,负责接收和处理客户端请求,以及对消息进行持久化。副本机制和分区机制保证了数据的持久化和伸缩性。消费者组提升了消费者端的吞吐量,而重平衡机制能够自动调整消费者组内的分区分配。此外,文章还介绍了Kafka Broker持久化数据的机制和消费者位移的概念。总之,本文为读者提供了全面的Kafka术语解释,帮助读者快速了解Kafka的核心概念和特点。 Kafka术语解释包括消息、主题、分区、消息位移、副本、生产者、消费者、消费者位移、消费者组、重平衡等概念。这些术语构成了Kafka的核心架构和功能特点,帮助用户理解Kafka的工作原理和优势。文章还提出了一个开放讨论问题,引发读者思考Kafka与MySQL在追随者副本对外提供读服务方面的差异。通过这些内容,读者可以快速了解Kafka的关键概念和特点,为进一步深入学习和应用Kafka奠定了基础。

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

全部留言(218)

  • 最新
  • 精选
  • 胡夕
    置顶
    结尾处增加了一张图,提炼了02中讲到的Kafka概念和术语,希望能够帮助到你:)
    2019-06-11
    6
    155
  • 时光剪影
    整理一遍个人的理解: Kafka体系架构=M个producer +N个broker +K个consumer+ZK集群 producer:生产者 Broker:服务代理节点,Kafka服务实例。 n个组成一个Kafka集群,通常一台机器部署一个Kafka实例,一个实例挂了其他实例仍可以使用,体现了高可用 consumer:消费者 消费topic 的消息, 一个topic 可以让若干个consumer消费,若干个consumer组成一个 consumer group ,一条消息只能被consumer group 中一个consumer消费,若干个partition 被若干个consumer 同时消费,达到消费者高吞吐量 topic :主题 partition: 一个topic 可以拥有若干个partition(从 0 开始标识partition ),分布在不同的broker 上, 实现发布与订阅时负载均衡。producer 通过自定义的规则将消息发送到对应topic 下某个partition,以offset标识一条消息在一个partition的唯一性。 一个partition拥有多个replica,提高容灾能力。 replica 包含两种类型:leader 副本、follower副本, leader副本负责读写请求,follower 副本负责同步leader副本消息,通过副本选举实现故障转移。 partition在机器磁盘上以log 体现,采用顺序追加日志的方式添加新消息、实现高吞吐量

    作者回复: 厉害!感觉比我写的简洁:)

    2019-06-16
    13
    173
  • 邋遢的流浪剑客
    如果允许follower副本对外提供读服务(主写从读),首先会存在数据一致性的问题,消息从主节点同步到从节点需要时间,可能造成主从节点的数据不一致。主写从读无非就是为了减轻leader节点的压力,将读请求的负载均衡到follower节点,如果Kafka的分区相对均匀地分散到各个broker上,同样可以达到负载均衡的效果,没必要刻意实现主写从读增加代码实现的复杂程度

    作者回复: 是的。前些天在知乎上就这个问题也解答了一下,有兴趣可以看看:https://www.zhihu.com/question/327925275/answer/705690755

    2019-06-06
    13
    96
  • 卡特
    加入a主题有4个分区,消费者组有2个实例,发布应用的时候,会先新启动一个服务节点,加入消费组,通过重平衡分配到到至少1个最多2个分区,消费者的偏移量是 1,重新从0开始 2,拿到分配分区的上一个消费者偏移量? 如果按照文章说的,即偏移量为0,消息应该会重复消费; 如果拿到上一个消费者的偏移量则不会消息重复消费,具体过程又是怎样的? 求解惑,

    作者回复: 整个故事是这样的:假设C1消费P0,P1, C2消费P2,P3。如果C1从未提交,C1挂掉,C2开始消费P0,P1,发现没有对应提交位移,那么按照C2的auto.offset.reset值决定从那里消费,如果是earliest,从P0,P1的最小位移值(可能不是0)开始消费,如果是latest,从P0, P1的最新位移值(分区高水位值)开始消费。但如果C1之前提交了位移,那么C1挂掉之后C2从C1最新一次提交的位移值开始消费。 所谓的重复消费是指,C1消费了一部分数据,还没来得及提交这部分数据的位移就挂了。C2承接过来之后会重新消费这部分数据。 我说清楚了吗:)

    2020-04-17
    3
    58
  • 永光
    为什么 Kafka 不像 MySQL 那样允许追随者副本对外提供读服务? 答:因为mysql一般部署在不同的机器上一台机器读写会遇到瓶颈,Kafka中的领导者副本一般均匀分布在不同的broker中,已经起到了负载的作用。即:同一个topic的已经通过分区的形式负载到不同的broker上了,读写的时候针对的领导者副本,但是量相比mysql一个还实例少太多,个人觉得没有必要在提供度读服务了。(如果量大还可以使用更多的副本,让每一个副本本身都不太大)不知道这样理解对不对?

    作者回复: 我个人觉得是很不错的答案,自己也学到了一些:)

    2019-06-10
    6
    43
  • jacke
    胡老师: 还想问个分区的问题,比如一个topic分为0,1,2 个分区 写入0到9条消息,按照轮训分布: 0分区:0,1,2,9 1分区:3,4,5, 2分区:6,7,8 那对于消费端来说,不管是p2p点对点模式,还是push/sub模式来说, 如何保证消费端的读取顺序也是从0到9?因为0到9条消息是分布在3个 分区上的,同时消费者是主动轮训模式去读分区数据的, 有没有可能读到后面写的数据呢?比如先读到5在读到4? ps:刚开始学习,问题比较多,谅解

    作者回复: 目前Kafka的设计中多个分区的话无法保证全局的消息顺序。如果一定要实现全局的消息顺序,只能单分区

    2019-06-22
    7
    36
  • 莫道不销魂
    老师,我想问下 1、 kafka是按照什么规则将消息划分到各个分区的? 2、既然同一个topic下的消息分布在不同的分区,那是什么机制将topic、partition、record关联或者说管理起来的?

    作者回复: 1. 如果producer指定了要发送的目标分区,消息自然是去到那个分区;否则就按照producer端参数partitioner.class指定的分区策略来定;如果你没有指定过partitioner.class,那么默认的规则是:看消息是否有key,如果有则计算key的murmur2哈希值%topic分区数;如果没有key,按照轮询的方式确定分区。 2. 这个层级其实是逻辑概念。在物理上还是以日志段(log segment)文件的方式保存,日志段文件在内存中有对应的Java对象,里面关联了你说的这些。

    2019-06-11
    2
    27
  • Happy
    主写从读无非就是为了减轻leader节点的压力,而kafka中数据分布相对比较均匀,所说的Follower从节点,实际上也是其他topic partition的Leader节点,所以在Follower可以读数据,那么会影响Follower节点上的做为Leader的partition的读性能,所以整体性能并没有提升,但是带来了主从数据同步延迟导致的数据不一致的问题

    作者回复: 同意:)

    2019-06-20
    3
    22
  • (´田ω田`)
    1、主题中的每个分区都只会被组内的一个消费者实例消费,其他消费者实例不能消费它。 2、假设组内某个实例挂掉了,Kafka 能够自动检测到,然后把这个 Failed 实例之前负责的分区转移给其他活着的消费者。 意思是1个分区只能同时被1个消费者消费,但是1个消费者能同时消费多个分区是吗?那1个消费者里面就会有多个消费者位移变量? 如果1个主题有2个分区,消费者组有3个消费者,那至少有1个消费者闲置?

    作者回复: 在一个消费者组下,一个分区只能被一个消费者消费,但一个消费者可能被分配多个分区,因而在提交位移时也就能提交多个分区的位移。 针对你说的第二种情况,答案是:是的。有一个消费者将无法分配到任何分区,处于idle状态。

    2019-06-06
    3
    22
  • 快跑
    老师,你好 假如只有一个Producer进程,Kafka只有一分区。Producer按照1,2,3,4,5的顺序发送消息,Kafka这个唯一分区收到消息一定是1,2,3,4,5么? Producer端,网络,数据格式等因素,会不会导致Kafka只有一个分区接收到数据顺序跟Producer发送数据顺序不一致

    作者回复: 如果retries>0并且max.in.flight.requests.per.connection>1有可能出现消息乱序的情况

    2019-07-02
    2
    15
收起评论
显示
设置
留言
99+
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部