博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Kafka的消息安全机制
阅读量:2069 次
发布时间:2019-04-29

本文共 1091 字,大约阅读时间需要 3 分钟。

序言

       关于JMS有一些共性的问题,每个框架给出的解决方案各不相同.这里仅针对Kafka.

 

生产者消息可靠性

生产者提供了如下的几个模式来弄处理生产消息的可靠性.

  1. 发送并忘记(不关心消息是否正常到达,对返回结果不做任何判断处理):发送并忘记的方式本质上也是一种异步的方式,只是它不会获取消息发送的返回结果,这种方式的吞吐量是最高的,但是无法保证消息的可靠性

  2. 同步发送(通过get方法等待Kafka的响应,判断消息是否发送成功):以同步的方式发送消息时,一条一条的发送,对每条消息返回的结果判断, 可以明确地知道每条消息的发送情况,但是由于同步的方式会阻塞,只有当消息通过get返回future对象时,才会继续下一条消息的发送
  3. 异步发送+回调函数(消息以异步的方式发送,通过回调函数返回消息发送成功/失败):在调用send方法发送消息的同时,指定一个回调函数,服务器在返回响应时会调用该回调函数,通过回调函数能够对异常情况进行处理,当调用了回调函数时,只有回调函数执行完毕生产者才会结束,否则一直会阻塞

 

对应配置文件的内容如下:当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/

你可能感兴趣的文章
AJAX 设计制作 在公司弄的 非得要做出这个养的 真晕!
查看>>
Linux 查看文件大小
查看>>
Java并发编程:线程池的使用
查看>>
redis单机及其集群的搭建
查看>>
Java多线程学习
查看>>
检查Linux服务器性能
查看>>
Java 8新的时间日期库
查看>>
Chrome开发者工具
查看>>
【LEETCODE】102-Binary Tree Level Order Traversal
查看>>
【LEETCODE】106-Construct Binary Tree from Inorder and Postorder Traversal
查看>>
【LEETCODE】202-Happy Number
查看>>
和机器学习和计算机视觉相关的数学
查看>>
十个值得一试的开源深度学习框架
查看>>
【LEETCODE】240-Search a 2D Matrix II
查看>>
【LEETCODE】53-Maximum Subarray
查看>>
【LEETCODE】215-Kth Largest Element in an Array
查看>>
【LEETCODE】312-Burst Balloons
查看>>
【LEETCODE】232-Implement Queue using Stacks
查看>>
【LEETCODE】225-Implement Stack using Queues
查看>>
【LEETCODE】155-Min Stack
查看>>