可靠性保证和复制机制

Kafka的以下几个基本特性保证了基本的可靠性:

  • Kafka保证一个分区的消息是FIFO的
  • 只有消息写入了所有分区的同步副本时,才认为是已提交的
  • 只要有一个副本活跃,则消息就不会丢失
  • 消费者只能读取已提交的消息

生产者可以进行有关配置,使得不一定等到数据认为是已提交的之后,才进行下一轮的投递,这是在可用性和一致性的之间的平衡

分区副本复制方式和同步条件:

  • 每个分区所在的broker需要向分区首领所在的broker每6s(可配置)发送一个zk的消息
  • 分区副本过去10s(可配置)内从分区首领那里获取过消息,且获取过最新消息。这是尽最大努力保证一致性。
  • 不同副本通过zk建立连接,并获取最新的数据
  • 滞后的副本会使得生产者和消费者变慢,因为生产者可能要配置确认的方式,而消费者必须等所有副本都同步,此时数据是已提交的之后,才可以读取

broker配置

复制系数及其意义
replication.factor:复制系数,指定了一个分区的副本个数,默认是3,意思是每个分区在不同的broker上有三个数据副本,会比原来多三倍的空间。

borker.rack:配置机架参数,一般要把不同的broker配置在不同的机架上。

不完全首领选举

  • 定义:不同步的副本分区之间,选取新的分区首领
  • 应用场景:首领分区的broker不可用,而且各个副本分区的broker都是不同步的情况。
    给出两个常见的场景:

    • 3个broker,某个partition有两个副本broker,而且都崩溃了。生产者写入数据,仍然会被记录(此时是主分区在读写),此时首领不可用,而有一个副本可用了,则副本会成为首领broker,但是数据是不同步的
    • 3个broker,由于网络问题导致两个副本不同步,此时首领崩溃,另外两个副本也无法同步
  • 具体方案:一般来说,只能在可用性和一致性之间抉择。选择集群不可用的情况;或者不一致的可用集群,此时副本会把就的消息删除,消费者无法获取对应的消息。

最少同步副本
多个副本的情况,可能出现部分副本不同的情况,为了保证一致性,需要设置min.insync.replicas参数,如果不同步或者不可用副本超过该数,则首领分区broker会停止接收生产者的数据,此时生产者会报错;但是消费者仍然可读。恢复可写的情况,需要重新让同步副本不小于该数。

生产者可靠性保证

两种常见的不可靠场景

  • 多个broker的集群,首领分区和副本分区都是同步的,在某一个时刻写入数据,此时首领分区的broker崩溃,而副本分区仍然认为自己是同步的;生产者的ack=1,首领分区在回复ack之后崩溃的。此时这条消息永远丢失
  • 多个broker集群,ack=all,此时如果有任一个broker不可用,生产者都会收到错误,因此需要生产者自己处理这种错误。

发送确认的保证

  • ack=0,此时只要发送成功即可,也不需要等首领分区的ack,因此吞吐量高,没有任何保证,一般仅用于基准测试。
  • ack=1,如果正在进行分区首领选举或者集群首领选举,则会受到错误;如果首领回复ack,也可能出现上面提到的不可靠情况,首领回复ack后瞬间崩溃。
  • ack=all和min.insunc.replicas混合使用,生产者一直重试直到所有的成功提交。生产者等待发送成功并发送下一条消息前,需要收到所有副本的确认。可以使用异步和增大批次的方式,提高效率。

生产者本身也要能处理自身的错误

消费者可靠性保证

消费者可靠性主要在两方面:

  • offset偏移量提交

    • 自动提交偏移量
    • 每次处理完成任务之后
  • 轮询设定,如果任务时间长,一定要保证心跳,心跳通过轮询发送

auto.offset.reset:如果没有偏移量可以提交,或者请求的偏移量不存在时,消费者的行为:

  • lastest:从分区的末尾读取,减少数据重复
  • earliest:从分区头部读取,会产生大量的重复数据

kafka保证数据可靠性的方式相关推荐

  1. Kafka 是如何保证数据可靠性和一致性

    学过大数据的同学应该都知道 Kafka,它是分布式消息订阅系统,有非常好的横向扩展性,可实时存储海量数据,是流数据处理中间件的事实标准.本文将介绍 Kafka 是如何保证数据可靠性和一致性的. 数据可 ...

  2. Spark Streaming使用Kafka保证数据零丢失

    为什么80%的码农都做不了架构师?>>>    源文件放在github,随着理解的深入,不断更新,如有谬误之处,欢迎指正.原文链接https://github.com/jacksu/ ...

  3. kafka 不同分区文件存储_Kafka 系列(二)文件存储机制与Producer架构原理怎样保证数据可靠性??...

    文章目录 Kafka工作流程及文件存储机制 工作流程: topic底层存储: Producer生产者架构: 一:分区存储策略: 1.分区的原因: 2.分区的原则: ProducerRecord构造器: ...

  4. kafka中副本数据同步策略 ,acknowledge的发送策略,kafka的数据可靠性保证

    ack(acknowledge)简介 为保证producer发送的数据,能可靠的发送到指定的topic,topic的每个partition收到producer发送的消息后,都需要向producer发送 ...

  5. SparkStreaming从Kafka读取数据两种方式

    参考文章:http://www.jianshu.com/p/60344796f8a5 在结合 Spark Streaming 及 Kafka 的实时应用中,我们通常使用以下两个 API 来获取最初的 ...

  6. wsasend发送不可靠_架构师总结:kafka 如何保证数据的可靠性和一致性

    Kafka 作为一个商业级消息中间件,消息可靠性的重要性可想而知.本文从 Producter 往 Broker 发送消息.Topic 分区副本以及 Leader 选举几个角度介绍数据的可靠性. Pro ...

  7. 【大数据哔哔集20210117】Kafka 的高可靠性是怎么实现的

    数据可靠性 Kafka 作为一个商业级消息中间件,消息可靠性的重要性可想而知.本文从 Producter 往 Broker 发送消息.Topic 分区副本以及 Leader 选举几个角度介绍数据的可靠 ...

  8. sqlite3数据存储最多存储多少条数据?达到上限如何处理?_在数据爆炸的当下,教你设计一个能实现9个9数据可靠性的存储系统...

    据 IDC 发布的<数据时代 2025>白皮书预测:在 2025 年,全球数据量将达到史无前例的 163ZB. 随着网络发展速度越来越快,数据的产生量正在呈指数级上升,企业面临的数据压力也 ...

  9. TCP协议-如何保证传输可靠性

    TCP协议传输的特点主要就是面向字节流.传输可靠.面向连接.这篇博客,我们就重点讨论一下TCP协议如何确保传输的可靠性的. 确保传输可靠性的方式 TCP协议保证数据传输可靠性的方式主要有: 校验和 序 ...

最新文章

  1. java 死锁 内存消耗_详解Java中synchronized关键字的死锁和内存占用问题
  2. Java 8 中处理日期和时间示例
  3. C++ Primer 5th笔记(8)chapter8 类:IO库-文件流
  4. php 和mysql实现抢购功能_php处理抢购类功能的高并发请求
  5. 如何在 IDEA 使用Debug 图文教程
  6. 试了试Docker桌面应用自带的K8s集群,一个字“简单”
  7. molicode生成vue增删改查功能
  8. Windows 环境变量的两点说明
  9. Java web 实现视频在线播放的常用几种方法
  10. TIFF文件结构详解
  11. python bytes类型中是ascii码_Python3 中bytes数据类型深入理解(ASCII码对照表)
  12. 方舟服务器占用多少内存,方舟生存进化占用多少内存
  13. Cocos2d-x 2.x、3.x读书摘要(2016-6-25 07:18)
  14. (bilibili)b站看不见视频评论区或不显示高级弹幕
  15. 现在的钱越来越难挣了吗?
  16. GIT Enter passphrase for key 'xxx': 已解决
  17. html 字号和像素的关系,一文搞懂CSS中的字体单位大小(px,em,rem...)
  18. 23考研 长安大学846计算机考研复试《数据库》
  19. linux centos cvs,在centos中配置cvs
  20. Python 爬取招聘网站数据,利用 tableau 可视化交互大屏,指导你如何学习、找工作!

热门文章

  1. oracle怎么执行存储过程_分享一个分析Oracle存储过程性能小技巧
  2. 3d 多相机分流_徕卡电影四摄的华为Mate30 Pro到底有多猛?开箱了解一下!
  3. Petya and Exam 模拟
  4. 轻量化网络:ShuffleNet V2
  5. 使用PyTorch前向运算时出现“RuntimeError: Expected object of scalar type Long but got scalar type Float for ……”
  6. 进制转换 [2008年北京大学图形实验室计算机研究生机试真题]
  7. 给你出道题---如何蒙题
  8. MQTT 控制报文类型、功能及格式(报文结构) - 第2章
  9. 14 事务控制和锁定语句
  10. 不可错过的「持续集成」进阶指南