Skip to content

1)Kafka

🌱 第 1 题(基础认知)

Q1:Kafka 是什么?适用于哪些应用场景?

📝 标准答案:

Kafka 是一个分布式的、高吞吐量的发布-订阅消息队列系统,主要用于构建实时数据流平台。

核心特点:

  • 高吞吐:百万级 TPS;
  • 分布式架构:支持水平扩展;
  • 持久化存储:使用磁盘存储数据;
  • 实时处理:毫秒级延迟;
  • 解耦系统组件、实现异步通信。

主要应用场景:

  1. 日志收集与处理(如 ELK 替代 Flume);
  2. 用户行为追踪(埋点系统);
  3. 消息中间件替代品(与 RabbitMQ 对比);
  4. 数据总线与异步通信(系统间解耦);
  5. 流式计算的上游输入源(配合 Flink、Spark Streaming)。

🌿 第 2 题(核心概念)

Q2:Kafka 的基本架构包括哪些核心组件?它们的作用是什么?

📝 标准答案:

Kafka 核心组件包括:

组件说明
Producer消息生产者,向 Topic 写入数据。
Consumer消息消费者,从 Topic 中读取数据。
Topic逻辑上的消息队列,消息以 Topic 分类。
Partition每个 Topic 可分为多个 Partition,提升并发吞吐能力。
BrokerKafka 服务实例,集群中可以有多个。
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.bytesfetch.max.wait.ms 提高批量拉取效率;
  • 增加 Consumer 实例数量,按需分配 Partition;
  • 使用并行处理消费逻辑,避免消费慢阻塞。

Broker 参数优化:

  • num.network.threadsnum.io.threads:提高网络与 I/O 处理能力;
  • log.segment.byteslog.retention.hours:根据数据量控制日志管理策略。

🪵 第 5 题(实际应用)

Q5:如何使用 Kafka 实现一个用户行为数据采集系统?请说明设计流程与关键点。

📝 标准答案:

系统目标:

  • 实时采集用户点击、浏览、下单等行为;
  • 保证数据高可用、顺序性、可追溯;
  • 支持后续实时分析或存入数据仓库。

设计方案:

前端采集:

  • 使用埋点脚本将用户行为 JSON 数据发送至服务端或网关;

Producer 层(如 Nginx + Fluentd / 自研 SDK):

  • 接收行为数据;
  • 按照业务模块将数据发送到 Kafka 不同 Topic(如 user_clicksuser_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 与系统负载。