如何保证 Kafka 消息不重复消费?
1.保存并且查询 每个消息一个唯一key 消费国记录下来,每次消费查询是否消费过,没有消费过才进行消费
2.利用幂等
将消费的业务设计成幂等性,比如利用数据库的唯一约束条件进行实现(比如转账操作 在转账流水记录中相同的账单id和相同的账户id视为唯一约束条件 重复操作直接失败)
3.设置前置条件的形式
比如通过数据加一个版本号的属性,每次更新数据前比较当前版本是否和消息中版本一致 如果不一致可以拒绝操作
如何保证Kafka消息的顺序执行
kafka只能保证同一个partition内的消息是顺序性的,但是整个topic下并不能保证是顺序的
1.因为kafka 天然存在是属性在同一个partion中消息是有顺序的 可以利用这种机制 同一类型的消息分配到一个分区partion中
2.消费者内部创建内存队列,对于需要顺序消费的业务数据,根据key或者业务数据放入同一个队列中,然后线程从对应的队列中取出数据