别着急,坐和放宽
使用社交账号登录
前言:Apache Kafka 是一个分布式流处理平台。它最初由 LinkedIn 开发,用于处理海量的日志数据。它的核心标签是 高吞吐、持久化 和 水平扩展。
Kafka 能达到单机百万级 QPS,主要归功于以下设计:
sendfile 系统调用,直接将数据从磁盘文件通道(FileChannel)传送到 Socket 通道,数据不经过用户态,减少了拷贝次数。batch.size (批次大小) 和 linger.ms (等待时间)。.log 和 .index)。这使得 Kafka 可以方便地删除过期的消息(直接删除旧的 Segment 文件)。Kafka 通过副本(Replica)机制保证高可用。
replica.lag.time.max.ms。如果 Follower 在规定时间内没有向 Leader 发送 Fetch 请求,或者没追上 Leader 的 LEO,就会被踢出 ISR。acks 配置这是保证数据不丢失的关键配置:
acks=0:发完就完事,不等待 Broker 确认。最快,但最不可靠。acks=1 (默认):Leader 写入成功就返回确认。如果 Leader 刚写完还没同步给 Follower 就挂了,消息会丢。acks=all (或 -1):Leader 等待 ISR 中所有副本都写入成功才返回确认。最可靠,但最慢。
min.insync.replicas=2。如果 ISR 数量少于 2,则拒绝写入,保证数据至少落盘到 2 个节点。Range (默认):按范围分,容易导致数据倾斜。RoundRobin:轮询分,更均匀。Sticky:粘性分配,尽量保持之前的分配不变,减少开销。Kafka 0.11+ 引入了幂等性 Producer 和事务。
enable.idempotence=true。保证单分区内消息不重复、不乱序。Kafka 的命令行工具非常强大,运维必会。
| 参数 | 作用 | 建议值 |
|---|---|---|
num.partitions | Partition 数量 | 根据吞吐量预估,通常 >= Broker 数 |
default.replication.factor | 默认副本数 | 生产环境建议 3 |
min.insync.replicas | 最小 ISR 数量 | 建议 2 (配合 acks=all 保证不丢数据) |
log.retention.hours | 消息保留时间 | 默认 168 (7天) |
auto.offset.reset | 无 Offset 时的策略 | earliest (从头读) 或 latest (读最新的) |
enable.auto.commit | 自动提交 Offset | 生产建议 false (手动提交) |
# 1. 创建 Topic
kafka-topics.sh --create --bootstrap-server localhost:9092 \
--replication-factor 3 \
--partitions 3 \
--topic my-topic
# 2. 查看 Topic 详情 (ISR, Leader 分布)
kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic my-topic
# 3. 生产者 (控制台)
kafka-console-producer.sh --bootstrap-server localhost:9092 --topic my-topic
# 4. 消费者 (控制台)
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic my-topic --from-beginning
# 5. 查看消费者组 Offset 情况 (Lag 积压量)
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group my-group