kafka一致性语义保证
一、消息传递语义:三种,至少一次,至多一次,精确一次
1、at lest once:消息不丢,但可能重复
2、at most once:消息会丢,但不会重复
3、Exactly Once:消息不丢,也不重复。
二、数据一致性保证:保证消息不丢、消息不重复
消息不丢:副本机制+ack,可以保证消息不丢。
数据重复:brocker保存了消息之后,在发送ack之前宕机了,producer认为消息没有发送成功进行重试,导致数据重复。
数据乱序:前一条消息发送失败,后一条消息发送成功,前一条又重试,成功了,导致数据乱序。
三、消息一致性保证:主要就是保证Exactly Once,即:数据不丢、数据不重复
1、0.11之前的kafka版本:保证消息丢,要在消息发送端和消费端都要进行保证。保证消息不重复,就是要对消息幂等,即去重
(1)消息发送端
request.required.acks 设置数据可靠性级别:
request.required.acks=1:当且仅当leader收到消息后返回commit确认信号后,消息发送成功。但有弊端,leader宕机,也就是还没有将消息同步到follower,这是会发生消息丢失。
request.required.acks=0:消息发送了,即认为成功,可靠性最低。
request.required.acks=-1:发送端等待isr列表所有的成员确认消息,才算成功,可靠性最高延迟最大。
(2)消息消费端
消费者关闭自动提交,enable.auto.commit:false,消费者收到消息处理完业务逻辑后,再手动提交commitSync offersets。这样可以保证消费者即使在消息处理过程中挂掉,下次重启,也可以从之前的offersets进行消费,消息不丢。
(3)消息去重:主要借助于业务系统本身的业务处理或大数据组件幂等。如:hbase 、elasticsearch幂等。
Hbse幂等:将消息从kafka消费出来,保存到hbase中,使用id主键+时间戳,只有插入成功后才往 kafka 中持久化 offset。这样的好处是,如果在中间任意一个阶段发生报错,程序恢复后都会从上一次持久化 offset 的位置开始消费数据,而不会造成数据丢失。如果中途有重复消费的数据,则插入 hbase 的 rowkey 是相同的,数据只会覆盖不会重复,最终达到数据一致。
http://bigdata-star.com/archives/1507
kafka一致性语义保证的更多相关文章
- DataPipeline CTO陈肃:构建批流一体数据融合平台的一致性语义保证
文 | 陈肃 DataPipelineCTO 交流微信 | datapipeline2018 本文完整PPT获取 | 关注公众号后,后台回复“陈肃” 首先,本文将从数据融合角度,谈一下DataPipe ...
- Kafka在高并发的情况下,如何避免消息丢失和消息重复?kafka消费怎么保证数据消费一次?数据的一致性和统一性?数据的完整性?
1.kafka在高并发的情况下,如何避免消息丢失和消息重复? 消息丢失解决方案: 首先对kafka进行限速, 其次启用重试机制,重试间隔时间设置长一些,最后Kafka设置acks=all,即需要相应的 ...
- 【消息队列】kafka是如何保证消息不被重复消费的
一.kafka自带的消费机制 kafka有个offset的概念,当每个消息被写进去后,都有一个offset,代表他的序号,然后consumer消费该数据之后,隔一段时间,会把自己消费过的消息的offs ...
- 流处理引擎(SPE)中的的分布式一致性语义之Exactly-Once和Effectively-Onece区别
-- At most Onece:最多一次,如果算子处理事件失败,事件将不再尝试该事件. -- At Least Onece:至少一次,如果算子处理事件失败,算子会再次尝试该处理事件,直到有一次成功. ...
- 【消息队列】kafka是如何保证高可用的
一.kafka一个最基本的架构认识 由多个broker组成,每个broker就是一个节点:创建一个topic,这个topic可以划分为多个partition,每个partition可以存在于不同的br ...
- Q&A系列一:DataPipeline常见问题回答
不知不觉中,大家已经陪伴DataPipeline走过了3年时间.在这期间,得益于客户们的积极反馈和沟通,我们总结了一些日常工作中比较常见的问题,并基于这些问题进行了总结. 为避免突兀,我们会先从比较基 ...
- Flink 笔记(一)
简介 Flink是一个低延迟.高吞吐.统一的大数据计算引擎, Flink的计算平台可以实现毫秒级的延迟情况下,每秒钟处理上亿次的消息或者事件. 同时Flink提供了一个Exactly-once的一致性 ...
- kafka实现无消息丢失与精确一次语义(exactly once)处理
在很多的流处理框架的介绍中,都会说kafka是一个可靠的数据源,并且推荐使用Kafka当作数据源来进行使用.这是因为与其他消息引擎系统相比,kafka提供了可靠的数据保存及备份机制.并且通过消费者位移 ...
- Kafka 0.11.0.0 实现 producer的Exactly-once 语义(中文)
很高兴地告诉大家,具备新的里程碑意义的功能的Kafka 0.11.x版本(对应 Confluent Platform 3.3)已经release,该版本引入了exactly-once语义,本文阐述的内 ...
随机推荐
- CF1033C Permutation Game
题目描述 输入输出样例 输入 #1 输出 #1 BAAAABAB 输入 #2 输出 #2 ABAAAABBBAABAAB 数据范围 1<=n<=1e5,1<=ai<=n 解题思 ...
- 使用while循环来处理列表和字典——参考Python编程从入门到实践
1. 在列表之间移动元素 unconfirmed_users = ['alice', 'brian', 'candace'] confirmed_users = [] # 验证每个用户,知道没有未验证 ...
- 27 多线程(一)——创建进程的三种方法、线程锁(同步synchornized与lock)
线程的流程 线程的创建 有三种方法,重点掌握前两种: 继承Thread类 实现Runnable接口(推荐使用:避免单继承的局限性) 实现Callable接口 根据java的思想,要少用继承,多用实现. ...
- pyenv基本使用
pyenv使用 1.安装: git clone https://github.com/pyenv/pyenv.git 2.配置pyenv环境变量 echo 'export PYENV_ROOT=&qu ...
- docekr安装mysql,redis,git和maven 脚本
编写脚本 images_install.sh #!/bin/bash # author:qiao # 安装脚本 # reids:3.2(自启) mysql:5.7(自启)或者JDK:1.8 tomca ...
- SAS学习笔记61 set和union的区别
好久没发博客了,水一篇,直接来代码 set的结果如下 union的结果如下
- ssh密码正确无法连接
新建了一个虚拟机,准备用ssh 连接管理,提示权限不足, 账号密码没问题,防火墙没有开 打开ssh服务的配置文件,默认在 /etc/ssh/sshd_config (不是 ssh_config) 检 ...
- Oracle开放1521端口 telnet不通解决办法
在windosw虚拟机server2012上安装Oracle数据库后,远程连接失败,报 java.sql.SQLException: The Network Adapter could not est ...
- 5_PHP数组_3_数组处理函数及其应用_1_快速创建数组的函数
以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. 一.快速创建数组的函数 1. range() 函数 程序: <?php $numbers = range(1 ...
- 二叉树、B树、B+树、B*树、VAL树、红黑树
二叉搜索树 每个节点只存储一个关键字, 每个节点最多有两个子节点, 左子节点存储的关键字小于本节点存储的关键字 右子节点存储的关键字大于本节点存储的关键字 搜索时,从根节点开始搜索,小于走左结点,大于 ...