kafka生产者消费者同步与异步

一 生产者发送的同步与异步

生产者发送消息依靠send方法,主要要同步和异步两种:

异步发送

producer.send(record,callback)

callback就是对发送消息后的回调。该方法输入参数是metaData和exception:当消息异步发送成功则exception为空;反之若发送失败则metadata为空exception非空。

同步发送

producer.send(record).get()

通过调用feature.get无限等待。若没有失败则返回对应的metaData包括消息发送的topic  part offset。

二 消费者提交消费offset的同步与异步

consumer通过向所属的协调者发送请求来实习位移提交。一般有手动和自动提交两种方式,手动提交通过enable.auto.commit=false设置。提交会存在三种消费语义:

at most once  先提交再消费  最多消费一次 存在数据丢失可能

at least once 先消费再提交  最少消费一次 存在重复消费可能(kafka默认)

exaclty once 通过事务等机制保证一定消费且只一次

手动提交主要包括同步commitSync和异步commitAsync两种方法实现。这里异步提交不是指consumer单独起一个线程进行位移提交,consumer会在用户主线程poll中不断轮旋这次异步提的结果。

提交时可以指定一个map参数,key是分区,value是下一条待消费消息位移

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章