Kafka-消息不丢失
1. 生产者发送消息到Brocker时丢失
解决方案:
① 设置异步发送消息
② 设置消息重试
2. 消息在Brocker中存储丢失
解决方案: 设置发送送确认机制acks
确认机制 | 说明 |
acks=0 | 生产者在成功写入消息之前不会等待任何来自服务器的响应,消息有丢失的风险,但是速度快 |
acks=1(默认) | 只要集群首领节点收到消息,生产者就会收到一个来自服务器的成功响应 |
acks=all | 只有当所有参与赋值的节点全部收到消息时,生产者才会收到一个来自服务器的成功响应 |
3. 消费者从Brocker接收消息丢失
Kafka中的分区机制指的是将每隔主题划分成多个分区(Partition)。
topic分区中消息只能由消费者组中的唯一一个消费者处理,不同的分区分配给同组内的不同的消费者。
消费者默认是自动按期提交已经消费的偏移量,默认是每隔5s提交一次。如果出现重平衡现象,可能出现重复消费或丢失数据。重平衡:某一个消费者服务宕机,但是其实际消费的消息和已经提交的偏移量不一致。
解决方案:禁用自动提交偏移量,改为手动。可以同步提交、异步提交、同步异步配合使用。