1. comsumer收到消息处理失败可以进行重试(会导致消费端一直卡在那儿,无法处理后面的消息),或者根据业务需要进行一定次数的重试(可能会导致超时)
2. 如果出现大量失败,说明可能是消息有问题或者消费端服务出现问题,可以对消息做一个校验,如果发现消息本身有问题就直接丢弃,否则可以将消息暂存
3. 批量拉取消息,如果其中部分失败怎么办?看业务需要,可以重试(注意保证消费端的幂等性),可以暂存或丢弃
4. 发送端可以将本地事务和发送消息作为一个整体事务,消息发送失败则对本地事务回滚。为了避免消息实际已经发送成功但ack超时导致produce端回滚造成数据不一致可以使用事务消息。
5. 消费端因为业务异常而回滚?最终一致性方案不允许消费端业务异常,如果有就是bug需要解决,只允许系统异常,可以参考上述暂存方案
其实,我觉得要怎么处理失败的情况应该结合具体的业务来,见仁见智,没有说那个方案就一定好。