Kafka
1. Kafka 概述
1.1 什么是 Kafka?
Kafka 是一个分布式流处理平台,主要用于消息队列(Message Queue)、日志收集(Log Collection)、**事件流处理(Event Streaming)**等场景。Kafka 由 LinkedIn 开发,并贡献给 Apache,现已成为主流的大数据处理工具之一。
1.2 Kafka 主要特点
-
高吞吐:Kafka 采用分布式架构,可支撑高并发、大流量数据传输。
-
可扩展性:支持动态扩展 Broker、Partition,适应不同规模的业务需求。
-
持久化:数据存储在磁盘上,支持数据回溯和持久化。
-
高可靠性:副本机制(Replication)保证数据不会因为 Broker 宕机而丢失。
-
实时性:支持低延迟的数据处理,适用于流式计算。
1.3 Kafka 主要应用场景
-
日志收集:将应用程序日志发送到 Kafka,再消费到存储或分析平台。
-
消息队列:作为高吞吐的消息队列,替代传统的 RabbitMQ、ActiveMQ。
-
流式计算:与 Spark Streaming、Flink、Storm 集成,实现实时数据分析。
-
监控数据收集:收集监控指标,推送到 ELK、Prometheus 等系统。
2. Kafka 架构
2.1 Kafka 组件
Kafka 主要由以下几个组件组成:
-
Producer(生产者):负责向 Kafka 发送消息。
-
Broker(消息代理):Kafka 服务器,存储和转发消息。
-
Topic(主题):消息的分类方式,类似于数据库中的表。
-
Partition(分区):Topic 可被分成多个分区,提高并行处理能力。
-
Consumer(消费者):消费 Kafka 中的消息。
-
Consumer Group(消费者组):消费者可以组成一个组,共享消费某个 Topic。
-
Zookeeper:用于存储 Kafka 集群的元数据,如 Broker 列表、Topic 信息等。
2.2 数据流动过程
-
Producer 发送消息到 Kafka 指定 Topic。
-
Kafka 将消息存入 Topic 的 Partition,并按顺序存储。
-
Consumer 订阅 Topic 并从 Partition 读取数据。
-
Kafka 通过 Replication 保证数据高可用性。
3. Kafka 安装与配置
3.1 安装 Kafka(单机模式)
3.1.1 下载 Kafka
wget https://downloads.apache.org/kafka/3.5.0/kafka_2.13-3.5.0.tgz
tar -xvzf kafka_2.13-3.5.0.tgz
cd kafka_2.13-3.5.0
3.1.2 启动 Zookeeper
bin/zookeeper-server-start.sh config/zookeeper.properties
3.1.3 启动 Kafka
bin/kafka-server-start.sh config/server.properties
3.2 创建 Topic
bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1
3.3 发送消息
bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092
然后输入消息,按 Enter 发送。
3.4 消费消息
bin/kafka-console-consumer.sh --topic test-topic --bootstrap-server localhost:9092 --from-beginning
4. Kafka 高级特性
4.1 分区策略(Partitioning)
Kafka 使用 Partition 来提高吞吐量,每个 Partition 都会分配到不同的 Broker,提高并行能力。
4.2 副本机制(Replication)
Kafka 通过 Replication 机制保证高可用性,默认一个 Partition 至少有 1 个副本(Leader + Follower)。
4.3 生产者消息发送策略
-
ack=0:不等待 Kafka 确认,可能丢数据。
-
ack=1:Leader 确认写入,但 Follower 未确认,可能丢数据。
-
ack=all:所有副本确认,最安全但性能较低。
4.4 消费者提交 Offset
-
自动提交:Kafka 定期提交 Offset,但可能丢数据。
-
手动提交:应用程序控制 Offset 提交,避免重复消费。
5. Kafka 生产环境优化
5.1 Broker 优化
-
调整 log.retention.hours:控制日志保留时间,减少存储压力。
-
增加分区数:提高并行度,避免单一 Partition 负载过高。
-
调整 heap.memory:避免 Kafka 进程 OOM(内存溢出)。
5.2 生产者优化
-
批量发送消息(batch.size):减少网络请求,提高吞吐。
-
压缩数据(compression.type):支持 gzip、snappy 等压缩方式。
5.3 消费者优化
-
合理规划 Consumer Group:避免多个消费者读取相同 Partition,导致重复消费。
-
使用独立线程处理消息:消费后立即交给线程池处理,提高消费能力。
6. Kafka 安全性
6.1 开启 SSL/TLS 认证
Kafka 支持加密通信,防止数据泄露。
ssl.keystore.location=/etc/kafka/server.keystore.jks
ssl.truststore.location=/etc/kafka/server.truststore.jks
6.2 启用身份验证(SASL)
Kafka 支持 SASL/PLAIN 方式进行身份认证。
authentication.type=SASL_SSL
sasl.mechanism=PLAIN
6.3 配置 ACL 权限
Kafka 允许设置 ACL 来控制哪些用户可以访问 Topic。
bin/kafka-acls.sh --add --allow-principal User:alice --operation Read --topic test-topic
7. Kafka 常见问题
7.1 Kafka 启动失败
可能原因:
-
Zookeeper 未启动
-
端口 9092 被占用
-
配置文件错误
7.2 消费者无法消费消息
可能原因:
-
没有指定
--from-beginning
-
Consumer Group Offset 过低
-
没有权限访问 Topic
7.3 Broker 磁盘占用过高
解决方案:
-
调整
log.retention.hours
或log.retention.bytes
-
启用数据压缩
8. 总结
Kafka 作为一个高性能、分布式的消息队列系统,适用于大规模数据流处理。熟练掌握 Kafka 的架构、操作、优化及安全策略,可以大幅提升业务系统的可靠性和性能。