拓冰建站拓冰建站
首页 / 资讯中心 / 正文

【每日搜索】2026.8.20

1. Kafka 和 RabbitMQ 生产者发送确认对比1、Kafka 生产者同步发送 异步发送producer.send(record)返回Future 对象异步发送java运行FutureRecordMetadata future producer.send(record);send 直接返回 Future主线程不用阻塞等待 broker 返回结果消息在后台发送。你可以后续处理 future也可以直接不管靠回调处理结果。同步发送java运行RecordMetadata recordMetadata producer.send(record).get();调用 Future 的.get()主线程阻塞一直等待 Kafka broker 返回发送结果拿到RecordMetadata包含分区、偏移量等才往下执行实现同步。注意get()会抛出异常生产环境需要捕获处理消息发送失败。2、RabbitMQ 生产者Publisher Confirms发布者确认RabbitMQ 没有 Kafka 这种 Futureget 的同步方式用Publisher Confirms 机制 Broker 收到消息之后会给生产者返回ack确认成功或者nack确认失败。java运行Channel ch ...; //注册确认回调ack成功回调nack失败回调 ch.addConfirmListener(ackCallback, nackCallback);ackCallbackBroker 正常接收消息触发成功回调nackCallbackBroker 拒绝消息触发失败回调两种 MQ 生产者确认核心区别表格特性Kafka ProducerRabbitMQ Publisher Confirms同步方式send ().get ()阻塞等待 Futurechannel.waitForConfirms () 阻塞异步方式send 带 Callback 回调addConfirmListener 监听 ack/nack返回结果RecordMetadatapartition、offsetack/nack 布尔标识面试要点总结Kafka send 本身就是异步加 get () 才变成同步不写 get 就是异步发送。RabbitMQ PublisherConfirmsBroker 回 ack 代表消息已经落盘nack 代表消息丢失业务需要做重发。Kafka 同步发送性能差会阻塞线程业务一般优先异步 回调处理失败少用.get()。Kafka 也支持异步回调写法javaproducer.send(record, new Callback() { Override public void onCompletion(RecordMetadata metadata, Exception exception) { if(exception ! null){ //发送失败处理 } } });运行2.
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门