Kafka消息保证不丢失和重复消费问题:
使用同步模式的时候,有3种状态保证消息被安全生产,在配置为1(只保证写入leader成功)的话,若是恰好leader partition挂了,数据就会丢失。
还有一种状况可能会丢失消息,就是使用异步模式的时候,当缓冲区满了,若是配置为0(尚未收到确认的状况下,缓冲池一满,就清空缓冲池里的消息),数据就会被当即丢弃掉。安全
在数据生产时避免数据丢失的方法: 只要能避免上述两种状况,那么就能够保证消息不会被丢失。
在同步模式的时候,确认机制设置为-1,也就是让消息写入leader和全部的副本。
在异步模式下,若是消息发出去了,但尚未收到确认的时候,缓冲池满了,在配置文件中设置成不限制阻塞超时的时间,也就说让生产端一直阻塞,这样也能保证数据不会丢失。异步
数据重复消费的状况,若是处理?
(1)去重:将消息的惟一标识保存到外部介质中,每次消费处理时判断是否处理过;
(2)无论:大数据场景中,报表系统或者日志信息丢失几条都无所谓,不会影响最终的统计分析结果。大数据