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拉取消息,处理后提交偏移量,确保消息按顺序消费并且在分区内不重复消费。每个消费者组独立地维护自己的消费进度,以实现高效的消息消费和负载均衡。

相关推荐
pnoker14 小时前
IoT DC3 消息总线:六适配器可插拔设计
物联网·架构·kafka·消息队列·rabbitmq
cxhello16 小时前
消费者活着、心跳正常、日志干净,但它七天没拉过一条消息
python·kafka
Lost of 程序猿19 小时前
ASP.NET Core Saga 分布式事务深度实战:备件采购跨服务长流程,如何保证“要么全成,要么全回“
分布式·后端·asp.net
XiYang-DING19 小时前
地图城市缓存优化:ApplicationReadyEvent + Caffeine + Redis + Redisson 分布式锁
redis·分布式·缓存
2601_9621756620 小时前
RabbitMQ 的工作模式
分布式·rabbitmq
头茬韭菜1 天前
图解 Fluss(四):分布式协调 —— 选举、副本状态机与
分布式·fluss
2601_962218612 天前
万象生鲜系统全链路溯源一码查询技术实现食材来源可查
分布式·微服务·云原生·架构
Dreams_l2 天前
RabbitMQ介绍及其工作模式
分布式·rabbitmq
2601_962218612 天前
万象生鲜系统大数据采购预测算法降低库存积压稳居第一
分布式·微服务·云原生·架构
程序员夏洛2 天前
Redis 中如何实现分布式锁?
数据库·redis·分布式