同步操作将从 后端研发Marion/marion-notes 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
1.1 定义
1.2 消息队列
1.3 Kafka基础架构
2.1 安装部署
2.2 Kafka命令行操作
3.1 生产者消息发送流程
3.2 异步发送API
3.2.1 普通异步发送
3.2.2 带回调函数的异步发送
回调函数会在 producer 收到 ack 时调用,为异步调用,该方法有两个参数,分别是元 数据信息(RecordMetadata)和异常信息(Exception),如果 Exception 为 null,说明消息发送成功,如果 Exception 不为 null,说明消息发送失败
3.3 同步发送API
3.4 生产者分区
3.4.1 分区好处
3.4.2 生产者发送消息的分区策略
3.4.3 自定义分区器
3.5 生产经验——生产者如何提高吞吐量
3.6 生产经验——数据可靠性
1)ack 应答原理
可靠性总结: acks=0,生产者发送过来数据就不管了,可靠性差,效率高; acks=1,生产者发送过来数据Leader应答,可靠性中等,效率中等; acks=-1,生产者发送过来数据Leader和ISR队列里面所有Follwer应答,可靠性高,效率低; 在生产环境中,acks=0很少使用;acks=1,一般用于传输普通日志,允许丢个别数据;acks=-1,一般用于传输和钱相关的数据, 对可靠性要求比较高的场景。
3.7 生产经验——数据去重
3.7.1 数据传递语义
• 至少一次(At Least Once)= ACK级别设置为-1 + 分区副本大于等于2 + ISR里应答的最小副本数量大于等于2 • 最多一次(At Most Once)= ACK级别设置为0 • 总结: At Least Once可以保证数据不丢失,但是不能保证数据不重复; At Most Once可以保证数据不重复,但是不能保证数据不丢失。 • 精确一次(Exactly Once):对于一些非常重要的信息,比如和钱相关的数据,要求数据既不能重复也不丢失。 Kafka 0.11版本以后,引入了一项重大特性:幂等性和事务。
3.7.2 幂等性
幂等性就是指Producer不论向Broker发送多少次重复数据,Broker端都只会持久化一条,保证了不重复。
精确一次(Exactly Once) = 幂等性 + 至少一次( ack=-1 + 分区副本数>=2 + ISR最小副本数量>=2) 。
重复数据的判断标准:具有<PID, Partition, SeqNumber>相同主键的消息提交时,Broker只会持久化一条。其 中PID是Kafka每次重启都会分配一个新的;Partition 表示分区号;Sequence Number是单调自增的。 所以幂等性只能保证的是在单分区单会话内不重复
3.7.3 生产者事务 - 30
3.8 生产经验——数据有序
3.9 生产经验——数据乱序
4.1 Kafka Broker工作流程
4.2 生产经验——节点服役和退役
4.3 Kafka 副本
4.3.1 副本基本信息
4.3.2 Leader选举流程
4.3.3 Leader和Follower故障处理细节
4.3.4 分区副本分配
4.3.5 生产经验——手动调整分区副本存储
4.3.6 生产经验——Leader Partition负载平衡
4.3.7 生产经验——增加副本因子
4.4 文件存储
4.4.1 文件存储机制
1)Topic 数据的存储机制
Topic是逻辑上的概念,而partition是物理上的概念,每个partition对应于一个log文件,该log文件中存储的就是Producer生产的数 据。Producer生产的数据会被不断追加到该log文件末端,为防止log文件过大导致数据定位效率低下,Kafka采取了分片和索引机制, 将每个partition分为多个segment。每个segment包括:“.index”文件、“.log”文件和.timeindex等文件。这些文件位于一个文件夹下,该 文件夹的命名规则为:topic名称+分区序号,例如:first-0。
2)思考:Topic 数据到底存储在什么位置?
3)index 文件和 log 文件详解
4.4.2 文件清理策略
4.5 高效读写数据
5.1 Kafka消费方式
pull(拉)模 式
push(推)模式
Kafka没有采用这种方式,因为由broker 决定消息发送速率,很难适应所有消费者的 消费速率。例如推送的速度是50m/s, Consumer1、Consumer2就来不及处理消息。
5.2 Kafka消费者工作流程
5.3 消费者API
5.4 生产经验——分区的分配以及再平衡
5.4.1 Range以及再平衡
5.4.2 RoundRobin以及再平衡
RoundRobin 针对集群中所有Topic而言。 RoundRobin 轮询分区策略,是把所有的 partition 和所有的 consumer 都列出来,然后按照 hashcode 进行排序,最后 通过轮询算法来分配 partition 给到各个消费者。
5.4.3 Sticky以及再平衡
粘性分区定义:可以理解为分配的结果带有“粘性的”。即在执行一次新的分配之前, 考虑上一次分配的结果,尽量少的调整分配的变动,可以节省大量的开销。
5.5 offset位移
5.5.1 offset的默认维护位置
5.5.2 自动提交offset
5.5.3 手动提交offset
手动提交offset的方法有两种:分别是commitSync(同步提交)和commitAsync(异步提交)。两者的相 同点是,都会将本次提交的一批数据最高的偏移量提交;不同点是,同步提交阻塞当前线程,一直到提交成 功,并且会自动失败重试(由不可控因素导致,也会出现提交失败);而异步提交则没有失败重试机制,故 有可能提交失败。
5.5.4 指定Offset消费
5.5.5 指定时间消费
5.5.6 漏消费和重复消费
重复消费:已经消费了数据,但是 offset 没提交。 漏消费:先提交 offset 后消费,有可能会造成数据的漏消费。
5.6 生产经验——消费者事务
如果想完成Consumer端的精准一次性消费,那么需要Kafka消费端将消费过程和提交offset 过程做原子绑定。此时我们需要将Kafka的offset保存到支持事务的自定义介质(比 如 MySQL)
5.7 生产经验——数据积压(消费者如何提高吞吐量)
2.1 初始化
2.2 发送数据到缓冲区
2.3 sender线程发送数据
3.1 初始化
3.2 消费者订阅主题
3.3 消费者拉取和处理数据
3.4 消费者Offset提交
XMind - Trial Version
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。