3 个回答
消费者端丢失数据的情况如下:
1、enable.auto.commit=true,消费在处理之前提交了offset,则处理异常可能会造成消息的丢失。
2、enable.auto.commit=false,Consumer手动批量提交位点,在批量位点中某个位点数据异常时,没有正确处理异常,而是将批量位点的最后一个位点提交,导致异常数据丢失
发布于:4个月前 (01-24) IP属地:四川省
生产者端丢数据的情况如下:
1、ack有3种状态保证消息被安全生产 ack=0,消息传输到Broker端没收到Broker的反馈即发送下一条,网络故障导致小东西丢失。ack=1,如果刚好leader partition挂了,数据就会丢失。ack=all,min.insync.replicas如果小于N或者Topic只有一个同步副本。
2、消息重试机制未开启。
3、当前消息过大,超过max.request.size大小,默认为1MB
4、生产者速率超过消费者,缓存池空间占满后,生产线程阻塞超过最大时间,此时生产者会抛出异常,如果没有处理好则会丢失数据。
发布于:4个月前 (01-24) IP属地:四川省
broker端消费丢失数据的情况如下:
1、unclean.leader.election为true,且选举出的首领分区为OSR时 可能就会发生消息丢失
2、min.insync.replicas为N,则至少要存在N个同步副本才能向分区写入数据。如果同步副本数量小于N时broker就会停止接收所有生产者的消息、生产者会出现异常,如果无法正确处理异常,则消息丢失。此时消费者仍然可以读取已有数据、变成只读状态。如果Topic只有一个同步副本,那么在这个副本变为不可用时,数据就可能会丢失。
3、kafka的数据一开始是存储在PageCache并定期flush到磁盘上的,如果出现断电或者机器故障等,PageCache上的数据就丢失了。
发布于:4个月前 (01-24) IP属地:四川省
我来回答
您需要 登录 后回答此问题!