1.幂等性
在kafka中,生产者再进行重试的时候有可能会重复写入相同的消息(比如,第一次写消息给broker, broker写入日志之后,发送ack失败。生产者误以为broker没收到改消息,所以根据retry 进行重发,这就导致了消息的重复),而使用kafka的幂等性功能之后就可以避免这种情况。
2.开启幂等性
enable.idempotence设置为true就可以(默认为false。)
3.事务处理与幂等性
在开启事务处理和listener设置以下属性时会自动开启enable.idempotence为true
properties = {"isolation.level:read_committed"}
5.开启幂等性后,相关配置需要注意
如果用户自定了retries参数,那么这个参数的值必须大于0,如果用户没定义这个参数,那么该参数的值就是Integer.MAX_VALUE;
如果用户自定了max.in.flight.request.per.connection, 要保证不能大于5.默认值是5。
max.in.flight.request.per.connection 表示生产者向指定broker发送的消息中,还未到达的个数。类似于tcp协议中滑动窗口里面未到达窗口的概念。它可以用来衡量该客户端一定时间段内到指定broker的网络通信情况。
如果用户自定了acks参数,那么就需要保证这个参数为-1。
网友评论