kafka配置和zookeeper描述(kafka, zookeeper, akhq, quorum controller)
大家好,这里是codeshow。
这一次,我们将练习kafka 。
如需练习,请clonecodeshow github的devcontainersrepository。
从kafka文件夹运行vscode。
运行devcontainers。
等到container运行。
当container运行完成后,我们将打开docker desktop。
3 kafka和 zoo keeper AKHQ正在运行。
描述这些容器:
动物园管理员是distributionsystem的coordinator。
在分布式环境中管理多个kafka服务器。
AKHQ提供了web UI来方便的管理kafka 。
它使用port8080。
zookeeper定期向所有kafka节点发送心跳信号。 zookeeper发出ping请求,Kafka 发出pong响应。如果某个kafka节点没有响应, zookeeper认为该kafka节点失败。
如果kafka3号失败,
pingpong,
zookeeper从管理节点删除kafka number 3。
然后,剩下的kafka 1和2被通知节点3故障, kafka 1和2不再与3通信。
供参考,重新创建kafka3时,如图注册到zookeeper中, kafka 1、2、3再次成为cluster。
作为参考,在实践中,只有一个zookeeper,
如图所示,在production环境中,安装了多个zookeeper节点。
将服务配置为即使在一个zookeeper出现故障时也能正常工作。
在课堂上,我们将只使用 1 个zookeeper,因为我们不需要像生产环境那样的高可用性。
让我们使用browser进入AKHQ提供的Nodes菜单。
屏幕上一共运行了3个kafka节点。
在docker desktop中停止 kafka2。
如果你回到AKHQ的节点菜单并刷新,
可以看到kafka2没有了。
再次按下docker desktop中的start按钮。
等待kafka加载并刷新AKHQ中的Nodes屏幕。
kafka2 将再次在屏幕上查找。
在这些kafka节点中,我们将停止control节点。
如果control节点之前未通过healthcheck,您可以看到另一个节点成为control节点。
在kafka中, zookeeper负责分布式环境中节点间的协调。
由于zookeeper的adminserver设置在 devcontainer 设置中设置为 true,
我们可以通过浏览器通过8081port查看zookeeper信息。
我将在浏览器中键入localhost冒号 8081slashcommands作为地址。
在commands页面上,您可以看到zookeeper以链接形式提供的命令。
选择connections链接。
http://localhost:8081/commands/connections
通过connections获取的json数据,可以查看连接到zookeeper的kafka节点信息。
我们通过dockercontainer查看这个IP是kafka节点。
hostname -I
可以看到zookeeper连接信息与kafka节点的IP相匹配。
可以在connections数组中查看三个kafka节点的连接信息。
现在,你可以看到总共有 3 个kafka节点在周期性地进行ping检测。
如上图所述,
当ping或pong失败时, zookeeper将有关失败节点的信息传递给其他kafka节点。
剩下的两个kafka节点不再与故障节点通信。
当kafka节点在zookeeper中恢复生机并且ping和pong成功时,
这条信息再次传播到剩下的两个节点,这些kafka节点与新节点进行通信。
此外,每个kafka节点本质上都需要一个控制器。
这个controller节点是一个非常重要的节点,负责管理和控制其他kafka节点。
使用zookeeper时,只有一个kafka节点可以作为控制器节点。
如果这个controller节点出现故障,所有的kafkacluster都无法运行。
因此,如果控制器节点发生故障,则应选举其他kafka节点之一作为控制器节点。
这个时候通过投票选出节点, zookeeper参与了这个过程。
因此zookeeper在kafka分布式系统中占有重要地位。
作为参考,除控制器节点外的其余节点称为broker节点。存储partition(您将在下一课中了解)负责broker节点。控制器节点管理broker节点并存储各种元数据以供broker节点使用。
作为参考, kafka从 2.8.0 版本开始额外提供了quorum controller。
它直接在kafka节点上管理kafka元数据,而无需通过KRaftprotocol使用zookeeper ,无需协调kafka与zookeeper 。
与现有的只有一个控制器节点的zookeeper相比,
quorum控制器可以有多个控制器节点。
也就是说,如果一个控制器节点发生故障,可以立即使用另一个控制器节点。
控制器节点始终同步元数据。
减少了从zookeeper复制元数据的现有成本,因此可以非常快速地启动控制器节点。
现在你有两个选择: zookeeper和quorum 。
将来, kafka可能会弃用zookeeper。
不过由于目前正在转型中,我觉得zookeeper和quorum controller依次学习还是不错的。
我们将练习使用shell命令简单地查询zookeeper 。
执行安装了kafka的container的shell。
通过zookeeper查询所有kafka。
zookeeper-shell zookeeper:2181 ls /brokers/ids
我确认数组中一共有三个 0, 1, 2cluster。
我们用get命令查看第0条kafka信息。
zookeeper-shell zookeeper:2181 get /brokers/ids/0
zookeeper-shell zookeeper:2181 get /brokers/ids/1
zookeeper-shell zookeeper:2181 get /brokers/ids/2
可以查看zookeeper中存储的kafka broker信息。
通过以上,我们学会了如何在分布式环境下用zookeeper来存储和协调kafka的各种信息。
以上,我们看了kafka的环境设置和内部运行。
下一次,我们将学习topic和partition。
订阅和点赞通知设置对内容创作者非常有帮助。
谢谢