1)Kafka
🌱 第 1 题(基础认知)
Q1:Kafka 是什么?适用于哪些应用场景?
📝 标准答案:
Kafka 是一个分布式的、高吞吐量的发布-订阅消息队列系统,主要用于构建实时数据流平台。
核心特点:
- 高吞吐:百万级 TPS;
- 分布式架构:支持水平扩展;
- 持久化存储:使用磁盘存储数据;
- 实时处理:毫秒级延迟;
- 解耦系统组件、实现异步通信。
主要应用场景:
- 日志收集与处理(如 ELK 替代 Flume);
- 用户行为追踪(埋点系统);
- 消息中间件替代品(与 RabbitMQ 对比);
- 数据总线与异步通信(系统间解耦);
- 流式计算的上游输入源(配合 Flink、Spark Streaming)。
🌿 第 2 题(核心概念)
Q2:Kafka 的基本架构包括哪些核心组件?它们的作用是什么?
📝 标准答案:
Kafka 核心组件包括:
组件 | 说明 |
---|---|
Producer | 消息生产者,向 Topic 写入数据。 |
Consumer | 消息消费者,从 Topic 中读取数据。 |
Topic | 逻辑上的消息队列,消息以 Topic 分类。 |
Partition | 每个 Topic 可分为多个 Partition,提升并发吞吐能力。 |
Broker | Kafka 服务实例,集群中可以有多个。 |
Zookeeper(或 Kraft) | 管理 Broker 元数据、协调选举(Kafka 2.8+ 可替代为 Kraft)。 |
Consumer Group | 一组消费者协作消费一个 Topic,实现负载均衡与容错。 |
示意图:
Producer --> Topic --> Partition 0
--> Partition 1
Consumer Group --> 多个消费者并发拉取数据
Broker Cluster --> 存储所有 Partition 数据
🌳 第 3 题(高阶使用)
Q3:Kafka 是如何保证消息的“顺序性”、“可达性”和“持久性”的?
📝 标准答案:
✅ 顺序性:
- 同一个 Partition 内部的消息是有序的;
- 若一个 Producer 向固定 Partition 写入,则该 Partition 内消息严格有序;
- 多 Partition 则消息整体无序。
✅ 可达性(At Least Once / Exactly Once):
- 默认是 At Least Once:可能重复,但不丢;
- At Most Once:允许丢弃(关闭 ack);
- Exactly Once(Kafka 0.11+):需要开启幂等性生产与事务,增加性能开销。
✅ 持久性:
- Kafka 使用磁盘存储数据,配合刷盘策略:
acks=all
:所有副本写入后才返回 ack;replication.factor
:副本数量提升容灾;log.flush.interval.messages/time
:控制 flush 到磁盘的频率;
- 通过 segment 文件滚动、索引和 compact 策略管理数据。
🌲 第 4 题(性能调优)
Q4:Kafka 如何提升吞吐量?有哪些调优参数或架构建议?
📝 标准答案:
✅ 架构优化:
- 增加 Partition 数:并行写入/读取提升并发;
- 增加 Broker 节点:提升整体带宽和处理能力;
- 使用 SSD 或高性能磁盘;
- Broker/Consumer 部署靠近数据源(避免跨地域延迟)。
✅ Producer 调优:
- 设置合理的批量参数:
batch.size
(一次发送消息大小);linger.ms
(等待时间);
- 开启压缩:
compression.type=gzip/snappy
; - 使用异步发送:减少阻塞。
✅ Consumer 调优:
- 调整
fetch.min.bytes
与fetch.max.wait.ms
提高批量拉取效率; - 增加 Consumer 实例数量,按需分配 Partition;
- 使用并行处理消费逻辑,避免消费慢阻塞。
✅ Broker 参数优化:
num.network.threads
、num.io.threads
:提高网络与 I/O 处理能力;log.segment.bytes
、log.retention.hours
:根据数据量控制日志管理策略。
🪵 第 5 题(实际应用)
Q5:如何使用 Kafka 实现一个用户行为数据采集系统?请说明设计流程与关键点。
📝 标准答案:
✅ 系统目标:
- 实时采集用户点击、浏览、下单等行为;
- 保证数据高可用、顺序性、可追溯;
- 支持后续实时分析或存入数据仓库。
✅ 设计方案:
前端采集:
- 使用埋点脚本将用户行为 JSON 数据发送至服务端或网关;
Producer 层(如 Nginx + Fluentd / 自研 SDK):
- 接收行为数据;
- 按照业务模块将数据发送到 Kafka 不同 Topic(如
user_clicks
、user_orders
); - 设置:
- 幂等写入;
- acks=all;
- compression=snappy;
- key 设置为用户 ID,确保相同行为进入同一 Partition。
Kafka 配置:
- Topic 分区按业务量水平扩展;
- 设置副本数 3,保障容灾;
- 使用 Retention 策略保存 7 天历史数据;
- 启用 Kafka Manager 监控健康状态。
消费者层(Consumer):
- 使用 Flink/Spark Streaming/Faust 等消费 Kafka 数据;
- 实时入仓(如 ClickHouse/Hive)或写入缓存(如 Redis)做大屏;
- 异常行为报警(如下单失败率 > 阈值)可触发钉钉/短信告警。
✅ 关键点总结:
- 精心设计 Topic 和分区规则;
- 使用幂等 Producer 保证消息不重复;
- 确保消费过程的幂等性和重试机制;
- 配置合理的容灾机制(副本机制);
- 使用监控工具监测 Topic lag 与系统负载。