结合到目前为止我们所知道的知识点 , 一起看下 4 个 Broker 的 Kafka 集群中 , 某一个 Topic 有三个 Partition , 其副本因子为 3(副本因子为3就是每个 Partition 有 3 个副本 , 一个 Leader , 两个 Follower)的架构图(图出自于《深入理解Kafka核心设计与实践原理》) 。

文章插图
1.2 Message 与 Partition在 1.1 小节中 , 我们已经知道一条消息只会存在一个 Partition中(只管 Leader , 不管 Follower) , 而 Offset 则是消息在 Partition 中的唯一标识 。而在本章节 , 我们将一起更深入地了解消息与 Partition 的关系 , 还有副本间同步数据所衍生的一些概念 。
上面有提到 Kafka 的多副本机制是 Leader 提供读写 , 而 Flower 是需要同步 Leader 的数据的 , 那么具体是怎样的呢?请看下图(单主题单分区3副本):

文章插图
当Producer 不断往 Leader 写入消息时 , Flower 会不断去 Leader 拉取消息 , 但是每台机器的性能会有出入 , 所以同步也有差异 , 正如上图这般 。对于 Consumer 而言 , 只有 HW 之前的消息是可见可拉取消费的 , 这样做有个好处就是当发生故障转移时 , Consumer 的 Offset 也不会发生数组越界的问题 。这种做法是 Kafka 权衡利弊后给出的数据可靠性与性能平衡的方案 , 即不采取同步复制(性能差 , 对于高并发场景是灾难般的设计) , 也不采取异步复制(完全异步 , 数据丢失问题突出) 。
当然 , 对于Producer 而言就是消息丢失了 , 有时我们需要确保消息百分百投递 , 这样不就有问题了吗?不急 , Kafka 可以在 Producer 的配置上配置 acks=-1 + min.insync.replicas=n(n 大于 1) , 这样配置后 , 只有消息被写入所有副本后 , Kafka 服务端才会返回 ack 给 Producer 。
下面来梳理下上面提及的几个概念:
- HW(Heigh Watermark)
- LEO(Log End Offset)
- AR(Assigned Rplicas)
- ISR(In-Syns Rplicas)
- OSR(Out-of-Sync Rplicas)
1.首先检查自己的linux 是否安装好了 yum 工具
rpm -qa|grep yum 
文章插图
使用 yum 安装好 wget
2.下载 ZK
wget https://archive.Apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

文章插图

文章插图
3.解压
tar -zxvf zookeeper-3.4.6.tar.gz 4.为ZK 创建存放数据和日志的文件夹mkdir data mkdir logs 
文章插图
5.修改ZK 配置文件
cd confcp zoo_sample.cfg zoo.cfg 
文章插图
vi zoo.cfg
修改配置内容具体如下:
# ZooKeeper 服务器心跳时间 , 单位:毫秒tickTime=2000# 投票选举新 Leader 的初始化时间initLimit=10# Leader 与 Flower 心跳检测最大容忍时间 , 响应超过 syncLimit*tickTime , 就剔除 FlowersyncLimit=5# 存放数据的文件夹dataDir=/root/zookeeper-3.4.6/data# 存放日志的文件夹dataLogDir=/root/zookeeper-3.4.6/logs# ZooKeeper提供给接入客户端的连接端口clientPort=2181# the maximum number of client connections.# increase this if you need to handle more clients#maxClientCnxns=60## Be sure to read the mAIntenance section of the# administrator guide before turning on autopurge.## http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance## The number of snapshots to retain in dataDir#autopurge.snapRetainCount=3# Purge task interval in hours# Set to "0" to disable auto purge feature
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 如何通乳
- 草鱼习性详解,掌握后可搞清鱼道,快速诱鱼进窝
- 如何快速提高英语口语水平
- 孕妇肚子胀气怎么办快速解决方法
- 翡翠中的纹、裂、棉,一文搞懂
- 快速打通任督二脉的方法 打通任督二脉的方法
- 如何快速瘦腿瘦屁股
- 一文搞懂CSS line-height和vertical-align
- 什么是商用密码?数字时代商用密码为何重要?一文解读
- “一统美国”进程加快?特斯拉充电技术正快速发展成为美国行业标准
