Kafka之精确一次处理语义

本文介绍了Kafka的三种消息处理语义:最多一次、至少一次和精确一次,并详细讲解了Kafka如何实现producer的幂等性和精确一次处理语义,包括producer发送消息的序列号和producer ID的使用,以及如何防止消息重复写入日志。同时,文章指出Kafka的幂等性设计仅能保证单个producer实例的幂等性。
摘要由CSDN通过智能技术生成

精确一次处理语义

  1. 消息处理语义

    • 最多一次(at most once):消息可能丢失也可能被处理,但最多只会处理一次
    • 至少一次(at least once):消息不会丢失,但可能被处理多次
    • 精确一次(exactly once):消息被处理且只会被处理一次
  2. producer:

    • 0.11.0.0之前,kafka producer默认提供至少一次(at least once)语义(重试机制)
    • kafka在0.11.0.0开始引入producer精确一次性语义EOS(exactly-once semantics)。即瞬时发送错误导致的producer重试,在broker端这条消息只会被写入日志一次。如果要启用幂等性producer以及获取EOS语义,需要显示设置producer参数enable.idempotence=true
  3. consumer:

    • 最多一次(at most once): consumer首先获取消息,然后提交offset,之后再处理消息。当提交offset后,consumer崩溃,消息可能永远不会被处理,即消息丢失
    • 至少一次(at least once):consumer先获取消息,然后处理消息,最后提交offset。当消息处理完,consumer崩溃,此时可能会重复处理
  4. 案例

    
    @Test
    public void testIdempotence() {
         
        Properties props = new Properties();
        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka-master:9092,kafka-slave1:9093,kafka-slave2:9094");
        props.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值