Kafka

Kafka 是一个分布式的、基于发布/订阅模式的消息队列系统,被广泛应用于大数据日志收集、实时数据处理和流式计算等场景。

1. 核心概念:发布/订阅模型

在 Kafka 的生态中,数据的流动基于经典的"发布/订阅"模型:

  • 生产者 (Producer) :负责采集数据并发送到 Kafka。在日志场景中,通常由 Filebeat 担任,负责从服务器采集 systemnginxmysql等各类日志。

  • 代理 (Broker):Kafka 集群由多个 Broker 组成,负责存储和转发消息。

  • 主题 (Topic) :为了区分不同类型的数据,Kafka 将数据分类存储在不同的 Topic 中(例如 topic-systemtopic-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 的工作逻辑如下:

  1. 采集 :Filebeat 在每台服务器上采集日志,并将数据推送到 Kafka 对应的 Topic(如 topic-nginx)。

  2. 存储:Kafka 将数据分散存储在多个 Broker 的分区中,实现负载均衡。

  3. 消费 :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 确认发送结果。

相关推荐
未若君雅裁11 小时前
Kafka 顺序消费:分区、消费者组、Key与业务有序性
分布式·微服务·kafka
Advancer-12 小时前
点评plus---异步消费之后可靠的生成订单
java·spring·kafka
AOwhisky13 小时前
Ceph系列第二期:Ceph集群部署实战(cephadm)
linux·运维·笔记·分布式·ceph·云计算·存储
qiuyepiaoling13 小时前
rabbitmq 基础
分布式·rabbitmq·ruby
未若君雅裁13 小时前
Kafka 消息可靠性:发送确认、acks、副本保存与Offset手动提交
分布式·微服务·kafka
phltxy13 小时前
RabbitMQ 事务与消息分发
分布式·rabbitmq
better_liang13 小时前
每日Java面试场景题知识点之-分布式秒杀系统的设计
java·redis·分布式·消息队列·高并发·秒杀系统·限流降级
woniu_buhui_fei14 小时前
分布式限流
java·分布式
woniu_buhui_fei14 小时前
Redis实现分布式限流
数据库·redis·分布式