Kafka 组件概念(基础)

Kafka 组件概念(基础)

kafka不同于RabbitMQ和RocketMQ,它没有queue的概念,取而代之的是分区:Partition。Kafka没有固定说一台服务器必须唯一对应一个主题

  • Broker 节点,现实生产环境中一个节点就是一台服务器;一个节点可以包括多个主题,和一个主题下的多个分区

    • Topic 主题,一个主题管理多个分区
      • Partition 分区,一个分区有多个follower,但仅有一个leader
        • Leader 主分区,处理数据的主力
        • follower 从分区,从分区的内容来自于拷贝主分区的数据
  • consumer 消费者,Kafka支持一个消费者消费不同Topic内的消息(通过订阅(subscribe)多个Topic来接收这些Topic中发布的消息)。

    虽然Kafka提供了消费者消费不同topic内的消息,但在生产环境中,建议一组消费者消费一个topic内的消息。这样有助于维护梳理业务

  • consumer group 消费者组,一个Topic中的同一条消息不可能被同一个Consumer Group内的不同Consumer各自消费一次

  • producer 生产者,向Kafka集群发送消息,一个生产者可以向不同的主题发送消息

Kafka使用的是生产批量发送,批量拉取消费的模式,既生产者生产了一条数据后不会立刻发送给topic下的leader,而是累积到一定数据大小后发送,消费者也是如此,每一次都从leader区中拿一批数据而不是一条一条拿,为了达到削峰的目的,Kafka支持consumer使用pull(拉取)的方式处理数据,举个例子,某一时刻producer生产100条/s,consumer消费速度恒定50条/s,如果以推送的方式,生产速度严重高于消费速度,消费者没处理完当前的消息,下一波又累积上来了,长此以往即会压垮消费者。

生产者如何确认消息发送成功?

生产者把数据发送给Kafka,Kafka处理成功后,Kafka会发送ACK消息给生产者,Kafka提供3种确认模式

  1. acks=0,生产者不用等待Kafka数据落盘的ACK响应(安全性和延迟最低,吞吐量最高)
  2. acks=1,Kafka数据落盘到leader,但follower还未完全同步leader中的数据,返回ACK消息(安全性和延迟中等,吞吐量中等,一般选这个配置)
  3. acks=all/-1,Kafka数据落盘到leader,且follower已同步leader中的数据,返回ACK消息(安全性和延迟最高,吞吐量最低)

ACK消息:Kafka收到消息后返给生产者的确认消息,而若Kafka处理消息失败则并不会返回ACK消息给生产者,而是返回一个异常或者错误码。而对于消息发送失败,生产者可以尝试重试再次发送数据。

而在Kafka中,消息的消费模型主要采用的是拉取模式(pull),当消费者从Kafka集群中拉取到消息并成功处理后,它会更新自己在Kafka中的消费偏移量,以标记哪些消息已经被成功消费。这个偏移量的更新过程,就是一种形式的ACK机制。

posted @   勤匠  阅读(11)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示