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是下一条待消费消息位移

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值