温馨提示×

debian kafka怎样保消息不丢

小樊
62
2026-09-03 19:15:14
栏目: 智能运维

在 Debian 上部署 Kafka 时,要“保证消息不丢”,需要从 生产者、Broker、消费者、运维 四个层面一起配置。下面按实战角度说明。


一、Broker 端(最核心)

1. 副本数(replication.factor)

replication.factor=3
  • 至少 3 副本
  • 允许 1~2 个节点宕机不丢数据

2. 最小同步副本(min.insync.replicas)

min.insync.replicas=2
  • 保证写入时至少有 2 个副本确认
  • 防止“只剩一个副本还在写”的情况

3. 关闭不完全首领选举

unclean.leader.election.enable=false
  • 防止从“落后太多的副本”选为 Leader 导致丢消息

二、生产者端(Producer)

1. 确认机制(acks)

acks=all
  • acks=all:Leader + 所有 ISR 副本都写入才返回成功

2. 重试机制

retries=2147483647
retry.backoff.ms=100
  • 网络抖动、Leader 切换时自动重试

3. 不丢异步消息

enable.idempotence=true
  • 防止重试导致重复
  • Kafka ≥ 0.11 支持

4. 防止内存丢消息

max.in.flight.requests.per.connection=5

(开启幂等时 Kafka 会自动限制)


三、消费者端(Consumer)

1. 手动提交 offset(非常重要)

enable.auto.commit=false

处理成功后再提交:

consumer.commitSync();

❌ 不要:

enable.auto.commit=true

2. 处理失败不要提交

  • 消费逻辑异常 → 不 commit
  • 可用死信队列(DLQ)

四、Topic 配置示例(Debian 命令行)

kafka-topics.sh --create \
  --topic order-topic \
  --partitions 6 \
  --replication-factor 3 \
  --config min.insync.replicas=2 \
  --bootstrap-server localhost:9092

五、系统 & 运维层面

1. 磁盘刷盘(OS 层)

Kafka 依赖页缓存 + 顺序写,一般 不需要 fsync 但:

  • 不要使用 noatime 错误配置
  • 使用 SSD / 企业盘

2. 监控

  • Under-Replicated Partitions = 0
  • ISR 数量 ≥ min.insync.replicas

3. 备份

  • 定期 kafka-dump-log
  • 跨机房 MirrorMaker2

六、总结一句话

Kafka 不丢消息 = acks=all + 多副本 + min.insync.replicas + 手动提交 offset

如果你愿意,我可以:

  • 给你一份 Debian + Kafka 生产级 server.properties
  • 或针对 Java / Python 生产者消费者代码 示例
  • 或帮你排查 当前为什么还会丢

你现在用的是 Kafka 几版本?单机还是集群?

0 踩