zoukankan      html  css  js  c++  java
  • kafka学习总结005 --- at-exactly-once语义

    kafka中有三种语义:

    1、at-most-once

    配置应答模式ack为0时,只要消息到了broker无论是否写成功,就回复ok,这样可能导致消息没有写入kafka;这种做法一般是为了减少消息的重复性,而且业务必须接受数据的丢失

    2、at-least-once

    producer在收到ack时,证明消息已经写入kafka;但是ack超时或者返回错误,producer会尝试重新发送消息;

    试想,如果消息已经写入kafka,但是在回复ack时异常,此时会导致消息被写入kafka两次,消费者在处理消息时要做去重处理

    3、at-exactly-once

    0.11版本的kafka引入了幂等性 ---  无论producer向kafka发送多少相同的消息,kafka知会持久化一条;

    也就是说at-least-once + 幂等性 = at-exactly-once

    幂等性的原理是什么

    启用幂等性:创建生产者时,设置enable.idompotence参数为true;

    启用幂等性的生产者在创建的时候会自动分配一个PID,并且发送给同一个分区的消息会携带序列号SeqNum;

    broker端缓存<PID, PartitionKey, SeqNum>,当有相同key的消息时,broker只会持久化一条

    需要注意的是,

    1、幂等性无法跨分区实现at-exactly-once;这是因为PID在生产者重启后会改变,并且不同分区的PartitionKey也不一致

    2、启用幂等性后,acks参数的取值一定是all或者-1

    这些问题也可以解决,后面会说到:生产者事务

  • 相关阅读:
    安装浏览器的vue插件
    webpack学习笔记-2-file-loader 和 url-loader
    webpack4.x最详细入门讲解
    简单地使用webpack进行打包
    vue动态监听浏览器窗口高度
    Vue 中 export及export default的区别
    vue 路由懒加载 resolve vue-router配置
    javascript深入理解js闭包
    JS截取字符串常用方法详细整理
    糗事之 -- 用ssh公钥实现免密码登录
  • 原文地址:https://www.cnblogs.com/sniffs/p/13020034.html
Copyright © 2011-2022 走看看