加入收藏 | 设为首页 | 会员中心 | 我要投稿 阜新站长网 (https://www.0418zz.com.cn/)- 管理运维、AI硬件、数据集成、云备份、负载均衡!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

新基建的波澜壮阔,或始于拥抱400GE

发布时间:2021-02-18 15:04:20 所属栏目:外闻 来源:互联网
导读:Kafka 选择了第二种方案,原因如下: 同样为了容忍 n 台节点的故障,第一种方案需要的副本数相对较多,而 Kafka 的每个分区都有大量的数据,第一种方案会造成大量的数据冗余; 虽然第二种方案的网络延迟会比较高,但网络延迟对 Kafka 的影响较

Kafka 选择了第二种方案,原因如下:

  • 同样为了容忍 n 台节点的故障,第一种方案需要的副本数相对较多,而 Kafka 的每个分区都有大量的数据,第一种方案会造成大量的数据冗余;
  • 虽然第二种方案的网络延迟会比较高,但网络延迟对 Kafka 的影响较小。

b) ISR

采用第二种方案之后,设想一下情景:leader 收到数据,所有 follower 都开始同步数据,但有一个 follower 挂了,迟迟不能与 leader 保持同步,那 leader 就要一直等下去,直到它完成同步,才能发送 ack,这个问题怎么解决呢?

leader 维护了一个动态的 in-sync replica set(ISR),意为和 leader 保持同步的 follower 集合。当 ISR 中的follower 完成数据的同步之后,leader 就会给 follower 发送 ack。如果 follower 长时间未向 leader 同步数据,则该 follower 将会被踢出 ISR,该时间阈值由 replica.lag.time.max.ms 参数设定。leader 发生故障之后,就会从 ISR 中选举新的 leader。(之前还有另一个参数,0.9 版本之后 replica.lag.max.messages 参数被移除了)

c) ack应答机制

对于某些不太重要的数据,对数据的可靠性要求不是很高,能够容忍数据的少量丢失,所以没必要等 ISR 中的follower全部接收成功。

所以Kafka为用户提供了三种可靠性级别,用户根据对可靠性和延迟的要求进行权衡,选择以下的acks 参数配置

0:producer 不等待 broker 的 ack,这一操作提供了一个最低的延迟,broker 一接收到还没有写入磁盘就已经返回,当 broker 故障时有可能丢失数据;

1:producer 等待 broker 的 ack,partition 的 leader 落盘成功后返回 ack,如果在 follower 同步成功之前 leader 故障,那么将会丢失数据;

-1(all):producer 等待 broker 的 ack,partition 的 leader 和 follower 全部落盘成功后才返回 ack。但是 如果在 follower 同步完成后,broker 发送 ack 之前,leader 发生故障,那么就会造成数据重复。

d) 故障处理

由于我们并不能保证 Kafka 集群中每时每刻 follower 的长度都和 leader 一致(即数据同步是有时延的),那么当leader 挂掉选举某个 follower 为新的 leader 的时候(原先挂掉的 leader 恢复了成为了 follower),可能会出现leader 的数据比 follower 还少的情况。为了解决这种数据量不一致带来的混乱情况,Kafka 提出了以下概念:


 

  1. 指明 partition 的情况下,直接将指明的值直接作为 partiton 值;
  2. 没有指明 partition 值但有 key 的情况下,将 key 的 hash 值与 topic 的 partition 数进行取余得到 partition 值;
  3. 既没有 partition 值又没有 key 值的情况下,第一次调用时随机生成一个整数(后面每次调用在这个整数上自增),将这个值与 topic 可用的 partition 总数取余得到 partition 值,也就是常说的 round-robin 算法。

2.3 副本(Replication)

同一个 partition 可能会有多个 replication( 对应 server.properties 配置中的 default.replication.factor=N)。没有 replication 的情况下,一旦 broker 宕机,其上所有 patition 的数据都不可被消费,同时 producer 也不能再将数据存于其上的 patition。引入 replication 之后,同一个 partition 可能会有多个 replication,而这时需要在这些 replication 之间选出一 个 leader, producer 和 consumer 只与这个 leader 交互,其它 replication 作为 follower 从 leader 中复制数据。

2.4 数据可靠性保证

为保证 producer 发送的数据,能可靠的发送到指定的 topic,topic 的每个 partition 收到 producer 数据后,都需要向 producer 发送 ack(acknowledgement确认收到),如果 producer 收到 ack,就会进行下一轮的发送,否则重新发送数据。

a) 副本数据同步策略主要有如下两种



 

(编辑:阜新站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读