本文共 1091 字,大约阅读时间需要 3 分钟。
关于JMS有一些共性的问题,每个框架给出的解决方案各不相同.这里仅针对Kafka.
生产者提供了如下的几个模式来弄处理生产消息的可靠性.
发送并忘记(不关心消息是否正常到达,对返回结果不做任何判断处理):发送并忘记的方式本质上也是一种异步的方式,只是它不会获取消息发送的返回结果,这种方式的吞吐量是最高的,但是无法保证消息的可靠性
对应配置文件的内容如下:当producer向leader发送数据时,可以通过request.required.acks参数来设置数据可靠性的级别:
1(默认):这意味着producer在ISR中的leader已成功收到的数据并得到确认后发送下一条message。如果leader宕机了,则会丢失数据。
0:这意味着producer无需等待来自broker的确认而继续发送下一批消息。这种情况下数据传输效率最高,但是数据可靠性确是最低的。
-1:producer需要等待ISR中的所有follower都确认接收到数据后才算一次发送完成,可靠性最高。但是这样也不能保证数据不丢失,比如当ISR中只有leader时,这样就变成了acks=1的情况。
唯一可能导致消费者弄丢数据的情况,就是说,你消费到了这个消息,然后消费者那边自动提交了 offset,让 Kafka 以为你已经消费好了这个消息,但其实你才刚准备处理这个消息,你还没处理,你自己就挂了,此时这条消息就丢咯。但是此时确实还是可能会有重复消费,比如你刚处理完,还没提交 offset,结果自己挂了,此时肯定会重复消费一次,自己保证幂等性就好了。
这个可以从逻辑上进行控制,也可以在队列上进行处理,比如只有一个消费者.没消费完一次才能消费下一个消息.
这个可以从逻辑上进行判断,但是这是万不得以的情况.另后面想到了问题在补充,欢迎骚扰:cuiyaonan2000@163.com
转载地址:http://ifcmf.baihongyu.com/