Kafka消息不丢失,不重复消费,保证顺序消费

消息不丢失

生产者端

1.acks 参数设置为 all,强制要求写入所有 ISR 中的副本成功后才认为是成功
2.retries 参数设置为 Integer.MAX_VALUE,在出现一条消息发送失败之后,就一直重试直到成功为止。

消费端

1.关闭自动提交,即设置 enable.auto.commit 为 false,同时使用同步提交及在代码中使用
commitOffsetsSync 函数按照 offset 的维度进行消息提交。

服务端

1.设置 log.flush.interval.messages 参数为 1,也就是每写入一条消息就强制刷盘。默认情况下 kafka 是不控制刷盘的,交给 OS 去控制。
2.设置 Topic 的副本数至少大于等于 2,通常情况下是默认为 3。

消息不重复

1.基于 DB 的唯一键,我们可以通过消息的内容拼成一个唯一的 key。然后创建一个幂等表,其中可以就两列 ,其中设置 key 列为唯一键。每次进行消息的业务处理前,进行幂等判断,也就是朝表中插入一个
key,如果报了对应的违反唯一性的异常,那么就跳过该消息的处理。
2.基于缓存,实现原理跟用 DB 基本一致,不过可以修改为判断 key 是否存在于缓存中,如果存在则跳过否则存入后再进行业务处理。

顺序消费

1.1个Topic(主题)只创建1个Partition(分区),这样生产者的所有数据都发送到了一个Partition(分区),保证了消息的消费顺序。
2.发送消息保证同步发送,不能异步发送。

你可能感兴趣的:(后端,JAVA,kafka,分布式,java)