Kafka 深入解析:架构原理、基本使用及丢数据场景分析
创作时间:
作者:
@小白创作中心
Kafka 深入解析:架构原理、基本使用及丢数据场景分析
引用
CSDN
1.
https://blog.csdn.net/tangtangttttt/article/details/146197298
Kafka 是一个高吞吐、分布式的消息队列系统,被广泛应用于日志处理、流式数据处理和事件驱动架构。本篇文章将详细介绍 Kafka 的架构原理、基本使用方法,并分析 Kafka 可能的丢数据场景及其解决方案。
一、Kafka 介绍
1. 什么是 Kafka?
Kafka 是 Apache 基金会开源的分布式流处理平台,主要用于:
- 消息队列(Message Queue):解耦生产者(Producer)和消费者(Consumer)。
- 日志收集(Log Aggregation):高效存储和处理日志数据。
- 流式处理(Stream Processing):结合 Kafka Streams 或 Flink 进行实时分析。
- 事件驱动架构(Event-Driven Architecture):事件存储和处理。
Kafka 采用发布-订阅(Pub-Sub)模型,生产者写入 Topic,多个消费者可订阅消费。
2. Kafka 的核心组件
- Producer(生产者):发送消息到 Kafka 主题(Topic)。
- Broker(消息代理):Kafka 服务器节点,存储和转发消息。
- Topic(主题):消息的分类,每个主题包含多个分区(Partition)。
- Partition(分区):提高并行性,一个 Topic 由多个分区组成。
- Consumer(消费者):从 Kafka 读取消息。
- Consumer Group(消费者组):多个消费者协同消费,提高吞吐量。
- Zookeeper:管理 Kafka 元数据(Kafka 3.x 之后支持 KRaft 代替 Zookeeper)。
二、Kafka 工作原理
1. Topic 和 Partition
Kafka 的主题(Topic)被划分为多个分区(Partition),并存储在不同 Broker 上,提高吞吐量。
- 生产者通过轮询(Round-Robin)或哈希(Key Hashing)方式将消息分配到不同分区。
- 消费者从不同分区并行消费数据。
2. 数据存储
Kafka 采用顺序写入的方式存储数据,提高性能,并利用Zero-Copy技术减少数据拷贝。
3. 消费者偏移量管理
Kafka 采用拉取(pull)模式消费数据,消费者维护自己的消费偏移量(offset)。
- offset 存储在
__consumer_offsets
主题。 - 可手动提交 offset,避免数据丢失。
4. 高水位线(HW)机制
高水位线(High Watermark, HW)表示 Kafka 确认同步到所有 ISR 副本的最大 offset。
- 消费者只能消费高水位线之前的数据。
- 如果 ISR 过小,HW 下降,部分数据不可见,甚至丢失。
三、Kafka 在 Linux 中的基本使用
1. 安装 Kafka
wget https://downloads.apache.org/kafka/3.6.0/kafka_2.13-3.6.0.tgz
tar -xzf kafka_2.13-3.6.0.tgz
cd kafka_2.13-3.6.0
2. 启动 Kafka
bin/zookeeper-server-start.sh config/zookeeper.properties &
bin/kafka-server-start.sh config/server.properties &
3. 创建 Topic
bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1
4. 生产和消费消息
bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092
bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092
5. 查看 Topic 和消费组信息
bin/kafka-topics.sh --describe --topic test-topic --bootstrap-server localhost:9092
bin/kafka-consumer-groups.sh --list --bootstrap-server localhost:9092
四、Kafka 丢数据的场景分析
Kafka 可能在生产、存储、消费三个环节丢数据。
1. 生产者端丢数据
- acks=0 或 acks=1:生产者未等待 Kafka 确认。
- 解决方案:使用 acks=all 确保数据至少写入 ISR 副本。
2. Broker 端丢数据
- min.insync.replicas=1:仅 Leader 副本存活,Follower 没同步就确认数据。
- 高水位线(HW)下降:新 Leader 选举后,未同步数据丢失。
- 解决方案:
bin/kafka-configs.sh --alter --entity-type topics --entity-name test-topic --add-config min.insync.replicas=2 --bootstrap-server localhost:9092
3. 消费者端丢数据
- 自动提交 offset:数据未处理就提交,应用崩溃导致数据丢失。
- 消费者组 Rebalance:Rebalance 过程中分区重分配,部分未处理数据丢失。
- 解决方案:
bin/kafka-console-consumer.sh --topic test-topic --bootstrap-server localhost:9092 --group my-group --consumer-property enable.auto.commit=false
五、总结
丢数据场景 | 原因 | 解决方案 |
---|---|---|
acks=0或acks=1 | 生产者不等待 Kafka 确认 | acks=all |
min.insync.replicas=1 | 仅 Leader 副本存活 | min.insync.replicas=2 |
高水位线 HW | ISR 副本数据丢失 | unclean.leader.election.enable=false |
自动提交 offset | offset 提交但数据未处理 | enable.auto.commit=false,手动提交 offset |
消费者组 Rebalance | Rebalance 期间数据丢失 | group.instance.id绑定静态成员 |
Kafka 由于其高吞吐特性,在默认配置下无法保证 100% 数据可靠性,但通过合理的参数配置(如 acks=all、min.insync.replicas=2、手动提交 offset 等)可以有效降低丢数据风险。
热门推荐
网上怎么申请车辆解除抵押
美食厨房丨水晶肴肉
明朝开国第一功臣究竟是谁?朱元璋是怎么评价的
十种做奶茶常用的茶叶有哪些 哪些茶适合做奶茶
教育系统必须正视人口出生数量急剧下降的挑战
绝地求生:狙击手必须知道的几个技巧,一举提高你的吃鸡率!
三款主流连狙综合对比,哪一款更适合你
解构漱口水7大迷思 留意成分功效各异
防火电缆的性能测试:常见标准与方法详解
生菜的生长习性是什么?生菜的生长环境条件是怎样的?
儿童心理学实验 | 孩子总爱找借口,竟是这种心理在作祟
6篇4章5节:如何应用SARIMA模型来进行时间序列数据的预测
李雅普诺夫稳定性分析
2025年成都高中最新排名榜单
脑子一直嗡嗡响是什么原因导致的
《清醒地活:超越自我的生命之旅》:一本关于个人成长与灵性觉醒的佳作
黄金投资如何根据价格走势制定决策
交管12123线上选车牌号规则与技巧详解
《群星纪元》全技能解读:六大技能体系详解与最佳搭配方案
彩票赊账引发纠纷,法院判决销售员赔偿3.2万元
你以為是健康食品?揭露麥芽糊精與糖對身體的真實影響
日本最全旅游攻略(关东关西篇)
公务员考试的科目和内容有哪些变化?
小腿肌肉塑形运动真的有效吗?教你练出纤细紧致小腿
青春期儿童生理发育的特点有哪些:青春期的烦恼
黑花生种植全攻略:从选种到收获的全程指南
车辆注册信息查询的途径有哪些
电动机一级能效和三级能效的区别
辩证施膳的概念及主要内容
为了教你正确地给鸡蛋剥壳,科学家煮了540个鸡蛋