当前位置: 首页 > article >正文

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 --> 消费分区2

ConsumerGroup2:(同时独立消费相同的数据)
├── 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. 外部索引
    • 维护消息元数据
    • 支持复杂查询需求

http://www.kler.cn/a/392818.html

相关文章:

  • 数据集标注txt文件读取小工具
  • uniCloud云对象调用第三方接口,根据IP获取用户归属地的免费API接口,亲测可用
  • 普通电脑上安装属于自己的Llama 3 大模型和对话客户端
  • 【ChatGPT】 如何让ChatGPT分析数据并得出结论
  • 深入理解接口测试:实用指南与最佳实践5.0(一)
  • pip3 install -e .[stable]讲解
  • Spring Boot编程训练系统:数据管理与存储
  • Leetcode刷题笔记14
  • 时序预测:多头注意力+宽度学习
  • 2 C++ 基本内置类型
  • Vulnhub靶场案例渗透[8]- HackableII
  • 更换电脑 重新安装软件
  • 前端基础的讲解-JS(11)
  • 磁盘的物理组成(Linux网络服务器 15)
  • Kafka--关于broker的夺命连环问
  • 半导体企业如何利用 Jira 应对复杂商业变局?
  • C++进阶-->封装map和set
  • deeponet作者相关三篇论文链接(理论基础、实用拓展、外推)
  • lmod安装和使用
  • 12 go语言(golang) - 数据类型:接口
  • C++ 优先算法 —— 四数之和(双指针)
  • 二、深度学习_基本概念笔记
  • UVC 输出视频格式修改和windows下数据分析
  • web实验3:虚拟主机基于不同端口、目录、IP、域名访问不同页面
  • Java学生管理系统(GUI和数据库)
  • vue3中查找字典列表中某个元素的值