欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > Kafka基础知识学习

Kafka基础知识学习

2024/11/14 15:15:54 来源:https://blog.csdn.net/sj1163739403/article/details/143703820  浏览:    关键词:Kafka基础知识学习

Kafka概念

一、核心组件对照表

组件定义主要功能特点
BrokerKafka集群中的服务器节点存储消息、处理请求、管理分区唯一ID,可能成为Controller
Topic消息的逻辑分类单元消息分类、存储组织包含多个Partition,类似数据库表
PartitionTopic的物理分片并行处理、数据分布有序队列,不可变,有offset
Offset消息在分区中的位置标识追踪消费进度单调递增,支持随机访问
Replica分区的备份数据备份、故障转移包括Leader和Follower

二、客户端组件表

组件定义主要功能特点
Producer消息生产者发送消息、分区策略支持同步/异步,可指定key
Consumer消息消费者消费消息、维护offset可订阅多个Topic
Consumer Group消费者逻辑分组负载均衡、分区分配组内分区独占消费

单分区场景下的消费组和消费者

1. 单分区场景
Topic: order_topic (单分区)
└── Partition 0 (消息1,2,3,4,5...)│├── ConsumerGroup1 (订单系统)│   └── Consumer1 (工作) --> 串行消费消息1,2,3,4,5...│   └── Consumer2 (空闲,无法分配分区)│   └── Consumer3 (空闲,无法分配分区)│├── ConsumerGroup2 (统计系统)│   └── Consumer1 (工作) --> 串行消费相同的消息1,2,3,4,5...│   └── Consumer2 (空闲,无法分配分区)│└── ConsumerGroup3 (日志系统)└── Consumer1 (工作) --> 串行消费相同的消息1,2,3,4,5...└── Consumer2 (空闲,无法分配分区)

多分区场景下的消费组和消费者

Topic: order_topic (3个分区)
├── Partition 0 (消息1,4,7...)
│   ├── ConsumerGroup1
│   │   └── Consumer1 (工作) --> 消费消息1,4,7...
│   ├── ConsumerGroup2
│   │   └── Consumer1 (工作) --> 消费相同的消息1,4,7...
│   └── ConsumerGroup3
│       └── Consumer1 (工作) --> 消费相同的消息1,4,7...
│
├── Partition 1 (消息2,5,8...)
│   ├── ConsumerGroup1
│   │   └── Consumer2 (工作) --> 消费消息2,5,8...
│   ├── ConsumerGroup2
│   │   └── Consumer2 (工作) --> 消费相同的消息2,5,8...
│   └── ConsumerGroup3
│       └── Consumer2 (工作) --> 消费相同的消息2,5,8...
│
└── Partition 2 (消息3,6,9...)├── ConsumerGroup1│   └── Consumer3 (工作) --> 消费消息3,6,9...├── ConsumerGroup2│   └── Consumer3 (工作) --> 消费相同的消息3,6,9...└── ConsumerGroup3└── Consumer3 (工作) --> 消费相同的消息3,6,9...

三、集群管理组件表

组件定义主要功能特点
Controller特殊的Broker角色Leader选举、监控状态集群只有一个活跃Controller
ISR同步副本集合保证数据一致性包含Leader和同步的Follower

四、场景举例表(程序考虑)

场景实现方式优点注意事项
消息查找基于Key保证顺序性,相同key到同分区可能导致数据倾斜
基于时间支持历史数据查询性能较低
基于Offset精确定位需要记录offset
外部索引支持复杂查询需要额外存储

五、实践总结与分析

1. 分区与副本分布示例

集群规模:3个Broker
Topic配置:3个分区,复制因子3分区分布示例:
Partition 0:Leader(Broker1),Follower(Broker2,Broker3)
Partition 1:Leader(Broker2),Follower(Broker3,Broker1)
Partition 2:Leader(Broker3),Follower(Broker1,Broker2)

2. 关键特性分析

  • 分区分配:均匀分布在所有Broker上
  • 副本策略
    • 每个分区的Leader优先在首选Broker上
    • Follower按照优化后的顺序分布在其他Broker上
    • 保证副本均匀分布,提高可用性

3. 消费模式分析

  • 单Consumer Group
    • 最多支持3个消费者(等于分区数,个人环境也是3个)
    • 超过3个消费者会有消费者空闲
  • 多Consumer Group
    • 每个Group都可以有最多3个消费者
    • 各Group独立消费,不互相影响
    • 实现消息的广播效果

多场景举例说明

例如:有一个Topic (order_topic),3个分区
│
├── 分区0
├── 分区1
└── 分区2场景A:单Consumer Group
ConsumerGroup1:
├── Consumer1 --> 消费分区0
├── Consumer2 --> 消费分区1
└── Consumer3 --> 消费分区2
└── Consumer4 --> 空闲(因为没有更多分区可分配)场景B:多Consumer Group
ConsumerGroup1:
├── Consumer1 --> 消费分区0
├── Consumer2 --> 消费分区1
└── Consumer3 --> 消费分区2ConsumerGroup2:(同时独立消费相同的数据)
├── Consumer1 --> 消费分区0
├── Consumer2 --> 消费分区1
└── Consumer3 --> 消费分区2
Topic: order_topic (3个分区)// 场景1:订单处理系统(负载均衡)
ConsumerGroup: order_processing
- Consumer1: 处理分区0的订单
- Consumer2: 处理分区1的订单
- Consumer3: 处理分区2的订单
结果:每个订单只被处理一次,实现负载均衡// 场景2:多系统数据同步(广播)
ConsumerGroup1: order_system
- Consumer1-3: 消费订单数据写入订单系统ConsumerGroup2: statistics_system
- Consumer1-3: 同样的数据写入统计系统ConsumerGroup3: log_system
- Consumer1-3: 同样的数据写入日志系统
结果:同一条消息被多个系统处理,实现数据广播

总结
1、分区数决定单个Consumer Group内最大的并行消费者数
2、Consumer Group提供了两种消费模式:

  • 单Group:负载均衡模式(消息只被处理一次)
  • 多Group:广播模式(同一消息被多个系统处理)

4. 消息查找策略(程序考虑)

  1. Key-Based查找
    • 相同key路由到固定分区
    • 适合需要顺序性的场景
  2. 时间查找
    • 支持按时间戳查找
    • 适合历史数据分析
  3. Offset查找
    • 精确定位消息位置
    • 适合消息重放场景
  4. 外部索引
    • 维护消息元数据
    • 支持复杂查询需求

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com