Kafka 是一个分布式的、基于发布/订阅模式的消息队列系统,被广泛应用于大数据日志收集、实时数据处理和流式计算等场景。
1. 核心概念:发布/订阅模型
在 Kafka 的生态中,数据的流动基于经典的"发布/订阅"模型:
-
生产者 (Producer) :负责采集数据并发送到 Kafka。在日志场景中,通常由 Filebeat 担任,负责从服务器采集
system、nginx、mysql等各类日志。 -
代理 (Broker):Kafka 集群由多个 Broker 组成,负责存储和转发消息。
-
主题 (Topic) :为了区分不同类型的数据,Kafka 将数据分类存储在不同的 Topic 中(例如
topic-system、topic-nginx)。 -
消费者 (Consumer):从 Kafka 中拉取数据进行处理。在架构中,Logstash 通常作为消费者,可以针对不同日志类型(如 access 日志、error 日志)进行精细化消费。
2. 数据存储机制:Topic 与 分区 (Partition)
Kafka 的核心设计在于其对数据的物理存储方式:
-
分片 (Partition) :一个 Topic 可以被切分成多个 Partition(分区),分布在不同的 Broker 上。例如,200 台服务器的日志数据可以通过 Filebeat 发送到 Kafka 的
topic_system,该 Topic 被分为 3 个分片(Partition01, 02, 03),分别存储在 Broker01、02、03 上。这种设计实现了数据的水平扩展 和高并发读写。 -
副本 (Replica):为了保证数据的高可用性,Kafka 为每个分区设置了副本。每个分区有一个 Leader 负责处理读写请求,其他副本(Follower)仅同步数据。如果 Leader 宕机,Follower 会顶替成为新的 Leader,确保服务不中断。
3. 精准定位:Offset 偏移量
Kafka 如何标记每一条数据的具体位置?
-
Offset:Kafka 为每个分区内的消息提供了一个唯一的递增数字标识,称为 Offset。它就像数组的下标一样,标记了消息在分区中的具体位置。
-
消费进度管理:消费者通过记录自己消费到的 Offset 来记住"看到哪里了"。即使系统重启,也可以从上次的 Offset 继续消费,保证数据不丢失且不重复(Exactly Once)。
4. 典型工作流程
结合实际的日志收集场景,Kafka 的工作逻辑如下:
-
采集 :Filebeat 在每台服务器上采集日志,并将数据推送到 Kafka 对应的 Topic(如
topic-nginx)。 -
存储:Kafka 将数据分散存储在多个 Broker 的分区中,实现负载均衡。
-
消费 :Logstash 作为消费者,按需拉取特定 Topic 的数据。例如,
logstash01拉取access日志,logstash02拉取error日志,进行后续的过滤、解析和存储。
1、Kafka 主机和分区的关系
Broker 负责存储分区,分区是并行的基本单位。每个分区只有一个 Leader,其余为 Follower,分布在不同的 Broker 上,通过副本机制保证高可用。
2、高并发优化及分区数设定依据
从 Broker 线程、Producer 批量与压缩、Consumer 并发三方面优化。分区数依据消费者数量、业务吞吐量和 Broker 规模综合评估,通常分区数不小于消费者数。
3、分区与消费组优化及避免重复消费
分区数要覆盖消费者并发度,避免热点分区。避免重复消费依靠幂等生产者、手动提交 Offset 以及在业务层做幂等校验。
4、Kafka 监控指标
Broker 层关注 ISR、离线分区和网络 IO;Topic 层关注消息堆积和消费速率;Producer 和 Consumer 关注发送成功率、重试率和消费延迟;系统层关注 CPU、磁盘和文件句柄。
5、Kafka 容量指标
重点关注磁盘使用率、分区日志大小、消息堆积 Lag 以及消息流入流出速率,结合磁盘 IO 进行容量预警和扩容。
6、Kafka 的作用
用于系统解耦、异步处理、削峰填谷和高吞吐可靠消息传递。
7、Kafka 如何保证数据持久化
通过顺序写磁盘、分区多副本、acks 配置以及刷盘策略,确保消息落盘且不丢失。
8、Kafka 集群高可用方案
采用多 Broker 部署,分区多副本,Leader 故障自动切换,配合 Controller 或 KRaft 进行集群协调,保障高可用。
9、Kafka 通过什么消费
由 Consumer 消费,按 Consumer Group 分配分区,支持自动或手动提交 Offset。
10、Kafka 消息积压怎么排查
通过 Consumer Lag 判断积压,排查消费速率、分区均衡性、Broker 性能和 GC 或线程阻塞问题。
11、Kafka 如何保证消息时序性
Kafka 只保证单分区内消息有序,跨分区无序。相同业务 Key 发送到同一分区即可保证顺序。
12、Kafka 有哪些组件
核心组件包括 Broker、Topic、Partition、Producer、Consumer、Consumer Group、Controller 以及 KRaft 或 ZooKeeper。
13、Kafka 高可用如何实现
通过多 Broker、分区多副本、Leader 自动选举以及消费组冗余共同实现高可用。
14、Kafka 消息丢失如何处理
配置 acks=all 和最小同步副本数,开启磁盘持久化,并在消费端做幂等处理或重试机制。
15、Kafka 是如何部署的
采用多 Broker 集群,Topic 设置多分区和多副本,使用 KRaft 或 ZooKeeper 管理元数据,并配合监控系统保障运行稳定。
16、Kafka 数据推送如何编写
通过 Producer SDK 实现,开启批量发送和压缩,按 Key 路由分区,并通过回调或 Future 确认发送结果。