Kafka的消费消息是如何传递的?

大家好,我是锋哥。今天分享关于【**Kafka的消费消息是如何传递的?】面试题。**希望对大家有帮助;

Kafka的消费消息是如何传递的?

1000道 互联网大厂Java工程师 精选面试题-Java资源分享网

在Kafka中,消息的消费是通过消费者(Consumer)来进行的,Kafka的消息传递机制主要依赖于消费者组(Consumer Group)偏移量(Offset)主题(Topic)。下面是Kafka消息消费传递的主要流程:

1. 主题(Topic)和分区(Partition)

Kafka中的消息通过主题(Topic)进行组织,主题又分为多个分区(Partition)。每个分区是一个有序的、不可变的消息队列,消息被追加到分区的末尾。

2. 消费者和消费者组

Kafka中的消费者读取消息时,通常会通过消费者组(Consumer Group)来进行。每个消费者组内的多个消费者共同消费一个或多个主题的消息。Kafka通过消费者组来保证消息的高效和负载均衡:

  • 一个消费者组内的消费者并不会重复消费同一个分区中的消息。每个分区只能被组内的一个消费者消费。
  • 如果消费者组中的消费者数目少于分区数,某些消费者将会被分配多个分区。
  • 如果消费者组中的消费者数目大于分区数,则一些消费者将没有分配到任何分区。

3. 消息的偏移量(Offset)

Kafka通过每个分区的偏移量 来追踪消费者消费的位置。每条消息都有一个唯一的偏移量,消费者通过记录该偏移量来保证消息的顺序消费和幂等消费。

  • 每个消费者组会维护每个分区的消费进度(即偏移量)。
  • 偏移量是由消费者主动提交的,可以是自动提交或手动提交。自动提交时,消费者会在消费消息后自动更新偏移量,手动提交时,消费者在确认处理完消息后才更新偏移量。
  • 消费者可以从特定的偏移量开始重新消费消息,Kafka会根据这个偏移量返回消息。

4. 消息的传递过程

Kafka消息的消费传递主要遵循以下流程:

  1. 生产者生产消息 :生产者将消息发送到Kafka的指定主题 (Topic)和分区(Partition)。
  2. 消费者订阅主题:消费者通过指定一个或多个主题来订阅消息。每个消费者会被分配到不同的分区。
  3. 消费者拉取消息:消费者会定期向Kafka的分区请求消息。消费者可以选择拉取指定数量的消息,Kafka会根据消费者的请求返回相应的消息。
  4. 消费者处理消息:消费者收到消息后会进行相应的处理。处理完毕后,消费者提交消息的偏移量,表示该消息已被成功消费。
  5. 消息确认和偏移量提交:消费者提交的偏移量可以是同步或异步的,提交的偏移量会记录在Kafka的**内置偏移量存储(__consumer_offsets)**中。

5. 消息重试与容错

如果消费者在消费消息时出现异常,或者未能及时提交偏移量,Kafka会根据偏移量确保消息不会丢失。消费者可以重新拉取未确认的消息,确保消息不会丢失。消费者也可以从上次成功提交的偏移量重新消费消息。

总结

Kafka的消息消费传递通过消费者组、分区和偏移量来实现。消费者从Kafka拉取消息,处理后提交偏移量,确保消息按顺序消费并且在分区内不重复消费。每个消费者组独立地维护自己的消费进度,以实现高效的消息消费和负载均衡。

相关推荐
香吧香41 分钟前
Kafka 三节点集群:只订阅一个 broker 会丢消息吗?能用 VIP订阅 吗?
kafka
盟道科技1 小时前
小程序订阅消息大规模投递实践:频控令牌池、Redis限流与失败补偿设计
分布式·算法·小程序
雾隐隐o2 小时前
Kafka 生产者消息丢失:ACK、重试与可靠发送
kafka
卷毛的技术笔记2 小时前
RocketMQ事务消息:我把分布式事务这层窗户纸捅破了
java·分布式·后端·java-rocketmq
heimeiyingwang3 小时前
【中台·技术篇】消息队列中台:Kafka/RocketMQ 统一管理与多租户隔离
kafka·rocketmq·中台
程序员天天困21 小时前
Kafka 接入 AI 的三条路线:MCP 提案、会话记忆与实时上下文
大数据·后端·kafka
懂软件的胡子个哥1 天前
微信工单系统如何基于 WechatApi 做消息分流和状态流转
运维·分布式·微信·架构·企业微信
九皇叔叔2 天前
从本地事务到分布式事务
java·分布式·分布式事务·cap·base
hey you~2 天前
云客服多渠道统一接入,消息队列技术实现方案
kafka·消息队列·rocketmq·系统集成·云客服·多渠道接入·接口对接
刃神太酷啦2 天前
Redis 核心进阶:哨兵、集群、缓存问题与分布式锁详解----《Hello Redis!》(6)
linux·c语言·数据库·c++·redis·分布式·缓存