Apache ZooKeeper在Kafka中的角色 - 监控和配置
1.目标
今天,我们将看到Zookeeper在Kafka中的角色。本文包含Kafka中需要ZooKeeper的原因。我们可以说,ZooKeeper是Apache Kafka不可分割的一部分。在了解ZooKeeper在Apache Kafka中的作用之前,我们还将看到什么是Apache ZooKeeper。
此外,我们将详细介绍ZooKeeper Production Deployment的介绍。此外,我们将讨论Apache Kafka如何与ZooKeeper对话。此外,这个Kafka ZooKeeper教程向我们介绍了ZooKeeper的硬件和配置。除此之外,我们将在ZooKeeper中研究ZooKeeper稳定版本和Monitoring。
那么,让我们讨论一下ZooKeeper在Kafka中的作用。
2.什么是ZooKeeper?
Apache ZooKeeper在系统架构中扮演着非常重要的角色,因为它在更多公开的大数据工具(如Apache Spark或Apache Kafka)的阴影下工作。换句话说,Apache Zookeeper是一个分布式的开源配置,同步服务以及分布式应用程序的命名注册表。
最初,ZooKeeper框架是在“Yahoo!”上构建的。因为它有助于以简单的方式访问其应用程序。此外,对于Hadoop,HBase使用的有组织的服务,它成为标准和其他分布式框架。
学习Apache Kafka Streams | 流处理拓扑
现在,让我们详细讨论ZooKeeper在Kafka中的作用:
3.卡夫卡的ZooKeeper
基本上,Kafka - ZooKeeper存储了很多关于Kafka消费者 和Kafka Brokers的共享信息,让我们详细讨论它们:
一个。卡夫卡经纪人
下面给出了ZooKeeper在Kafka Broker中的角色 :
i。州
动物园管理员确定州。这意味着,它注意到,如果卡夫卡经纪人还活着,总是会经常发送心跳请求。此外,虽然Broker是处理复制的约束,但它必须能够满足复制需求。
II。配额
为了获得不同的生产和消费配额,Kafka Broker允许一些客户。此值在/ config / clients路径下的ZK中设置。另外,我们可以在bin / kafka-configs.sh脚本中更改它。
III。副本
但是,对于每个主题,Kafka中的Zookeeper都保留一组同步副本(ISR)。此外,如果先前选择的领导节点失败,那么在当前活动节点的基础上,Apache ZooKeeper将选择新的领导者。
看看Apache Kafka职业范围与薪资趋势
iv。节点和主题注册表
基本上,Kafka中的Zookeeper存储节点和主题注册表。可以在Kafka中找到所有可用的代理,更准确地说,每个代理持有哪些Kafka主题,在/ broker / ids和/ brokers / topics zNodes下,它们被存储。此外,当它启动时,Kafka经纪人会自动创建寄存器。
湾 卡夫卡消费者
一世。偏移
ZooKeeper是Kafka 0.9.1版本中消费者偏移的默认存储引擎。但是,有关每个消费者消费Kafka消费者消息的所有信息都存储在ZooKeeper中。
II。Kafka的注册管理机构
消费者 也有自己的注册表,就像Kafka Brokers一样。但是,同样的规则适用于它,即。作为短暂的zNode,一旦消费者关闭就会销毁它,并且消费者会自动进行注册过程。
4. Kafka如何与ZooKeeper交谈?
在这里,我们将看到Kafka类如何负责使用ZooKeeper。代表Kafka的Scala类是KafkaServer。它的startup()方法initZk()包含对初始化ZooKeeper连接的方法的调用。我们在这个Zookeeper方法中使用了这种算法中的几种方法。因此,在这种情况下,该方法创建与ZooKeeper的临时连接。此会话负责创建与chroot相对应的zNode,如果它是miAfterwarderwards,此连接将关闭并创建服务器持有的最终连接。
之后,仍然在initZk()内部,Kafka初始化所有持久性zNode,尤其是服务器使用的zNode。我们可以在那里检索:/ consumer,/ broker / ids,/ broker / topic,/ config,/ admin / delete_topics,/ broker / seqid,/ isr_change_notification,/ config / topics,/ config / clients。
学习Apache Kafka + Spark Streaming Integration
现在,使用同步来初始化其他成员,我们可以使用这个创建的ZooKeeper实例:
- 副本经理
- 配置管理员
- 协调员和控制器
5. ZooKeeper生产部署
为了存储持久性集群元数据,Kafka使用ZooKeeper。假设,我们丢失了| zk |中的Kafka数据,副本到Kafka Brokers的映射以及主题配置也将丢失,这使得我们的Kafka群集不再起作用并可能导致总数据丢失。
6. ZooKeeper的稳定版本
但是,当前的稳定分支是3.4,该分支的最新版本是3.4.9。
另外,我们可以使用“四字母单词”ENVI来查找正在运行的服务器的当前版本。
例如:
echo envi | nc localhost 2181
它显示ZooKeeper服务器的所有环境信息,包括版本。
注意:只有使用此版本的ZooKeeper,ZooKeeper才能启动脚本并测试ZooKeeper的功能。
7. ZooKeeper Server的硬件
以下是为ZooKeeper服务器群集选择适当硬件的一些指导原则。
一个。记忆
基本上,当仅处理Kafka存储的数据时,ZooKeeper不是内存密集型应用程序。确保在典型的生产用例中,ZooKeeper应该至少使用8 GB的RAM。
湾 中央处理器
作为Kafka元数据,ZooKeeper存储不会大量消耗CPU资源。ZooKeeper还提供延迟敏感功能。这意味着我们必须考虑提供一个专用的CPU内核,以确保上下文切换不是一个问题,如果它必须与其他进程竞争CPU。
让我们修改Apache Kafka Security | Kafka的需求和组成部分
C。磁盘
为了保持健康的ZooKeeper集群,磁盘性能非常重要。为了获得最佳性能,我们建议使用固态硬盘(SSD),因为ZooKeeper必须具有低延迟磁盘写入。
8. JVM(Java虚拟机)
通常,ZooKeeper作为JVM运行。在为Kafka用例运行时,它不是特别堆。对于大多数用例和监视堆使用情况,我们建议使用1 GB的堆大小来阻止由于垃圾回收而导致的延迟。
9. ZooKeeper的重要配置选项
大多数部署都不需要配置调整。要考虑的一些重要参数是:
一个。CLIENTPORT
在这个端口ZooKeeper中,客户端将会收听。在这里,我们将Brokers连接到ZooKeeper。通常,此值设置为2181.
类型:int
重要性:必需
湾 DATADIR
它是我们存储ZooKeeper数据的目录。但是,它应该是一个理想的SSD专用磁盘。
类型:字符串
重要性:必需
浏览Apache Kafka用例| 卡夫卡应用程序
C。滚动时间
对于ZooKeeper,时间单位转换为毫秒。它管理所有ZooKeeper时间相关的操作。我们特别用它来做心跳和超时。
注意:最小会话超时将是两个滴答。
类型:int
默认值:2000
重要性:高
d。maxClientCnxns
它是ZooKeeper服务器的最大客户端连接数。将此值设置为0(无限制),以避免耗尽允许的连接。
类型:int
默认值:60
重要性:高
即 autopurge.snapRetainCount
它只是分别在dataDir和dataLogDir中保留autopurge.snapRetainCount最新快照和相应的事务日志,并在启用它时删除剩余的快照。
类型:int
默认值:3
重要性:高
F。autopurge.purgeInterval
以小时为单位的时间间隔触发清除任务非常重要。要启用自动清除,请将其设置为正整数(1和更高)。
类型:int
默认值:0
重要性:高
10.在ZooKeeper中监控 - Kafka
为了确保服务器正常运行并主动识别问题,我们需要监控ZooKeeper服务器。监测的最佳做法是:
一个。操作系统
当ZooKeeper服务开始变得困难时,底层操作系统指标可以帮助预测。我们应该监控:
一世。打开文件句柄的数量
这应该在系统范围内完成,并且对于运行ZooKeeper进程的用户。应根据允许的最大打开文件句柄数来考虑值。它还经常打开和关闭连接,而且,它需要一个可用的文件句柄池来供选择。
II。网络带宽使用情况
ZooKeeper对网络延迟引起的超时很敏感,因为它跟踪状态。如果网络带宽以某种方式饱和,那么只有我们可能难以解释客户端会话的超时,尽管这会导致Kafka群集不太可靠。
湾 “四字母词”
基本上,ZooKeeper只响应一组命令,每一个命令都是四个字母。要运行命令,我们必须将消息(通过netcat或telnet)发送到ZooKeeper客户端端口。例如echo stat | nc localhost 2181会将STAT命令的输出返回给stdout。
C。JMX监控
对监视很重要的JMX度量标准:
NumAliveConnections
OutstandingRequests
AvgRequestLatency
MaxRequestLatency
HeapMemoryUsage(Java内置)
此外,通过SessionExpireListener,Kafka跟踪相关ZooKeeper事件的数量。基本上,它受到监控以确保ZooKeeper-Kafka交互的健康:
阅读Apache Kafka架构及其基本概念
ZooKeeperAuthFailuresPerSec(仅限安全环境)
ZooKeeperDisconnectsPerSec
ZooKeeperExpiresPerSec
ZooKeeperReadOnlyConnectsPerSec
ZooKeeperSaslAuthenticationsPerSec(仅限安全环境)
ZooKeeperSyncConnectsPerSec
11. ZooKeeper多节点设置
ZooKeeper服务器在真实的生产环境中部署在多个节点上。这就是我们所说的合奏。基本上,一个集合是一组2n + 1个ZooKeeper服务器,其中n表示任何大于0的数字。此外,为了执行多数领导选举,奇数个服务器允许ZooKeeper。在整体中最多可以有n个失败的服务器,并且ZooKeeper集群将保持仲裁。
12.部署后
一旦我们部署了ZooKeeper集群,ZooKeeper在很大程度上运行时没有太多维护。
所以,这完全是关于卡夫卡的ZooKeeper角色,希望你喜欢我们的解释。
体验最好的Apache Kafka测验部分
13.结论
因此,在Kafka教程中ZooKeeper的这个角色,我们已经看到Kafka确实需要ZooKeeper在Kafka集群中高效工作。总之,我们了解到ZooKeeper zNodes中的所有Kafka代理配置存储。即使是Kafka消费者也需要Zookeeper知道最后消费的消息。此外,我们还研究了ZooKeeper服务器监控,ZooKeeper服务器中的硬件。最后,我们讨论了ZooKeeper的重要配置选项。