在 Debian 上部署的 Kafka“丢消息”,通常不是 Kafka 本身有 bug,而是配置、架构或使用方式导致消息在「生产者 → Broker → 消费者」链路上丢失。下面按最常见原因 → 对应解决系统说明。
acks=0 # 发了就当成功(极易丢)
✅ 解决:
acks=all
并保证:
min.insync.replicas=2
很多代码:
producer.send(record); // 不管结果
✅ 解决:
producer.send(record, callback);
或:
producer.send(record).get();
linger.ms=0
buffer.memory 太小
进程崩溃时内存中消息直接丢。
✅ 解决:
linger.msenable.idempotence=true
default.replication.factor=1
Broker 宕机即丢。
✅ 解决:
default.replication.factor=3
min.insync.replicas=2
Debian 上常见:
/var/lib/kafka 被清✅ 检查:
df -h
ls /var/lib/kafka/logs
enable.auto.commit=true
auto.commit.interval.ms=5000
消费前就提交 → 崩溃即丢。
✅ 解决:
enable.auto.commit=false
处理完再:
consumer.commitSync();
→ 消息被跳过
dmesg | grep -i kill
Kafka 被系统杀掉 → 未刷盘消息丢失
✅ 解决:
KAFKA_HEAP_OPTSDebian 未开 NTP:
timedatectl status
# 生产者
acks=all
enable.idempotence=true
# Broker
replication.factor >= 3
min.insync.replicas=2
# 消费者
enable.auto.commit=false
# 系统
NTP 同步
磁盘正常
你可以直接贴配置或描述:
“生产者怎么发的 / 消费者怎么消费的 / 什么时候发现丢的”