02 | 一篇文章带你快速搞定Kafka术语
该思维导图由 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-116155
- 时光剪影整理一遍个人的理解: 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-1613173 - 邋遢的流浪剑客如果允许follower副本对外提供读服务(主写从读),首先会存在数据一致性的问题,消息从主节点同步到从节点需要时间,可能造成主从节点的数据不一致。主写从读无非就是为了减轻leader节点的压力,将读请求的负载均衡到follower节点,如果Kafka的分区相对均匀地分散到各个broker上,同样可以达到负载均衡的效果,没必要刻意实现主写从读增加代码实现的复杂程度
作者回复: 是的。前些天在知乎上就这个问题也解答了一下,有兴趣可以看看:https://www.zhihu.com/question/327925275/answer/705690755
2019-06-061396 - 卡特加入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-17358 - 永光为什么 Kafka 不像 MySQL 那样允许追随者副本对外提供读服务? 答:因为mysql一般部署在不同的机器上一台机器读写会遇到瓶颈,Kafka中的领导者副本一般均匀分布在不同的broker中,已经起到了负载的作用。即:同一个topic的已经通过分区的形式负载到不同的broker上了,读写的时候针对的领导者副本,但是量相比mysql一个还实例少太多,个人觉得没有必要在提供度读服务了。(如果量大还可以使用更多的副本,让每一个副本本身都不太大)不知道这样理解对不对?
作者回复: 我个人觉得是很不错的答案,自己也学到了一些:)
2019-06-10643 - 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-22736 - 莫道不销魂老师,我想问下 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-11227 - Happy主写从读无非就是为了减轻leader节点的压力,而kafka中数据分布相对比较均匀,所说的Follower从节点,实际上也是其他topic partition的Leader节点,所以在Follower可以读数据,那么会影响Follower节点上的做为Leader的partition的读性能,所以整体性能并没有提升,但是带来了主从数据同步延迟导致的数据不一致的问题
作者回复: 同意:)
2019-06-20322 - (´田ω田`)1、主题中的每个分区都只会被组内的一个消费者实例消费,其他消费者实例不能消费它。 2、假设组内某个实例挂掉了,Kafka 能够自动检测到,然后把这个 Failed 实例之前负责的分区转移给其他活着的消费者。 意思是1个分区只能同时被1个消费者消费,但是1个消费者能同时消费多个分区是吗?那1个消费者里面就会有多个消费者位移变量? 如果1个主题有2个分区,消费者组有3个消费者,那至少有1个消费者闲置?
作者回复: 在一个消费者组下,一个分区只能被一个消费者消费,但一个消费者可能被分配多个分区,因而在提交位移时也就能提交多个分区的位移。 针对你说的第二种情况,答案是:是的。有一个消费者将无法分配到任何分区,处于idle状态。
2019-06-06322 - 快跑老师,你好 假如只有一个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-02215