本节主要内容

  1. 数据写入流程
  2. 分区策略
  3. ACK应答机制
  4. leader异常处理
  5. follower异常处理

数据写入流程

数据写入流程(图1)

1、确定分区,producer确认数据写入哪个分区

2、发送数据,到leader分区

3、leader写入完成,follower分区从leader分区拉取数据

4、确定数据是否写入成功

成功

5、返回ack给producer

6、producer接收到ack,数据写入成功,继续发送下一批数据

失败

7、数据没有写入成功,producer重发数据

图1

分区策略

分区原因

1、方便扩展

2、提高并发

分区原则

1、指明partition的情况下,直接发送数据到对应的partition

2、没有指明partition,但有key的情况下,将key的hash值与topic的partition数进行取余得到partition值。

3、既没有指明partition,又没有key的情况下,第一次随机生成一个整数,之后每次调用都在这个整数上自增,将该值与可用的partitions总数取余得到partition值,即round-robin算法

ACK应答机制

acks参数配置,提供以下三个选项

0:producer不等待ack,不管是否写入成功,能提供最低延迟,会丢数据

1:producer等待ack,leader写入成功返回ack,不管follower是否写入成功,会丢失数据

-1:producer等待ack,leader和follower全部写入成功返回ack,极端情况下,如果follower同步完成后,发送ack之前,leader发生故障,会造成数据重复。

leader异常情况处理

leader异常,需要解决两个问题

1.读一致性

2. 写一致性

先解释两个概念: LEO与HW(图2)

LEO - Log End Offset,每个副本最后一个offset

HW - High Watermark,所有副本中,最小的LEO

图2

leader异常,读一致性问题(图3)

问题描述

leader和follower当前存储数据状况:leader当前数据记录到 9, follower 0同步完成7, follower 1同步完成8

1、consumer从leader读取数据消费到9

2、leader故障

3、重新选举follower1 为leader

新leader中记录数据只到8,消费者无法继续消费9以后的数据

解决方案

Consumer只能读取 HW之前的数据,当leader发生故障时,不会影响consumer读取数据

图3

leader异常,写一致性问题(图4)

问题描述

1、leader故障

2、重新选举follower1 为leader

3、原来的leader恢复正常,变为follower 1,此刻,其数据是9,大于新leader的8

这种情况下follower如何从leader同步数据?

解决方案

4、follower 1读取HW,将HW这后的数据删除,从leader拉取数据,起始位置为8

图4

follower异常(图5)

问题描述

ack配置为-1时,需要确定所有follower写成功才能返回ack,如果单个follower挂掉,leader需要一直等待,直到follower写入成功,影响数据写入

解决方案

Leader动态维护ISR(in-sync replica set),记录和leader保持正常同步的follower集合,保证ISR中的follower全部写入成功即可发送ack。

当follower在限定时间内(通过参数replica.log.time.max.ms配置)未从leader拉取数据,则该follower将被踢出ISR。

处理流程

1、leader写入数据完成,follower开始从leader拉取数据

2、follower 1异常,不能从leader正常拉取数据

3、leader在限定时间内未收到follower 1同步请求,确定follower 1异常,从ISR中移除follower 1

4、follower 0完成同步,ISR中记录的follower全部成功

5、返回ack给producer

数据写入成功,继续发送下一批次数据

图5

学习交流,如有问题,请指证,感谢!!!

拉取数据_Apache Kafka-数据写入过程相关推荐

  1. docker拉取(下载)数据太慢,docker pull xxxx一直卡着。

    docker pull xxxx,docker拉取(下载)数据太慢 可能因为网络波动导致拉取失败或者一直卡着. 添加国内镜像,然后点击Apply&restart 即可! "regis ...

  2. 【四】【vlc-android】播放控制交互与demux解复用层、媒体数据流拉取层的具体数据传递和控制流程源码分析

    1.VLC中有很多demux/mux/encoder/decoder模块,因此需要先了解这些模块的加载原理,模块的加载原理基本一致,因此举例分析MP4解复用模块如何加载完成的,主要流程如下: // v ...

  3. python3 beautifulsoup 表格,使用Python中的BeautifulSoup拉取特定的表数据

    匿名用户 下面的脚本提取数据并将数据保存到csv文件中.import requests from bs4 import BeautifulSoup import pandas as pd res = ...

  4. java kafka 拉取_java获取kafka consumer lag

    maven依赖 org.apache.kafka kafka-clients 0.10.1.0 注意:kafka-clients版本需要0.10.1.0以上,因为调用了新增接口endOffsets; ...

  5. 大数据智慧数字电商第四课 数据拉取和etl处理

    大数据数仓项目第04天 课程目标 能够点击流日志实时拉宽处理 能够对订单数据以及订单明细数据进行实时etl处理 能够使用Flink异步IO拉取Redis维度数据 能够对商品数据以及购物车和评论数据实时 ...

  6. 日志服务数据加工最佳实践: 从其他logstore拉取数据做富化

    概述 使用全局富化函数做富化时, 需要传递一个字典或者表格结构做富化. 参考构建字典与表格做数据富化的各种途径比较.  本篇介绍从使用资源函数res_log_logstore_pull从其他logst ...

  7. 一键“拉取”链上数据 海淀区应用遍地开花

    近日,北京市首台运用区块链等新技术的政务服务终端亮相海淀区政务服务中心,为办事企业和群众提供自助政务服务.9月1日,<证券日报>记者前往海淀政务服务中心,实地体验了基于区块链等技术的自助便 ...

  8. 北京首台区块链政务终端亮相 一键“拉取”链上数据

    近日,北京市首台运用区块链等新技术的政务服务终端亮相海淀区政务服务中心,为办事企业和群众提供自助政务服务.9月1日,<证券日报>记者前往海淀政务服务中心,实地体验了基于区块链等技术的自助便 ...

  9. 一款漫画APP的实现(三)- 数据拉取 ② - 拉取速度改进

    在上篇博客里我们谈到了漫画数据的拉取思路以及获取数据的基本操作,不过最后我们也遇到了一些问题. 上篇里,我们发现获取到的数据中,只有图片是无法正常显示的,而在文章最后我们也知道了造成这一问题的原因就在 ...

最新文章

  1. CVPR 2020 | CentripetalNet:目标检测新网络,COCO 48 % AP超现所有Anchor-free网络
  2. python 笔记:csv 读写
  3. HttpClient 讲解 (2) 项目封装
  4. opencv 图像 抠图 算法_我讨厌这个绿油油的头像!我用opencv换一下背景
  5. Python | 新手必会的 9 个 Python 技巧
  6. RTEMS 的 AT91SAM9260 移植(8): 编译
  7. 如何进入游戏行业_进入设计行业
  8. MySQL架构与历史【v1】【励志把高性能MySQL吃掉】
  9. 博弈论 —— matlab
  10. 201521145048《Java程序设计管理》第一周学习总结
  11. 实现远程连接MySQL
  12. 从入门到入土,Redis简明教程
  13. 中国程序员最应该感谢的几家公司
  14. 博文荐书:阿里运维、Java微服务、Scala编程
  15. Oracle DB_LINK如何使用
  16. adb指令禁用软件_免Root使用ADB命令_停用手机系统应用
  17. 计算机网络体系结构图解
  18. 给女友定时发送睡前小故事
  19. sql数据库考试试题
  20. C语言学习(十)C语言中的小数

热门文章

  1. Zabbix housekeeper processes more than 75% busy
  2. C/C++编译预处理指令
  3. 【CSON原创】HTML5游戏框架cnGameJS开发实录
  4. laravel 调试mysql_Laravel - MySQL数据库的使用详解3(Query Builder用法2:新增、修改、删除)...
  5. python添加库详细教程_Python 中如何自动导入缺失的库?|python基础教程|python入门|python教程...
  6. 华南理工大学 高级程序设计语言 c++ ,2017华南理工大学网络教育《高级语言程序设计C++》平时作业...
  7. java chars_Java getChars() 方法 - Java 基础教程
  8. MATLAB怎么表示均布荷载,MATLAB平面四节点等参元分析程序说明
  9. thinkphp mysql 日志_thinkphp5 日志
  10. 标定中是什么意思_机械加工中,测头有什么作用呢?