我最近部署了大数据集群。在那,我使用了Apache Kafka和zookeeper。但我仍然不了解它在集群中的用法。什么时候需要和为什么目的?
答案 0 :(得分:1)
我在这里简化了概念。您可以在此article
找到详细说明Kafka 是一种快速,可扩展,分布式的分布式和复制提交日志服务。它有独特的设计。
特定类型的消息流定义为主题。
制作人可以是任何可以向主题发布消息的人。
然后,已发布的消息将存储在一组名为 Brokers 或 Kafka Cluster 的服务器中。
消费者可以订阅一个或多个主题,并通过从经纪商处提取数据来使用已发布的消息。
ZooKeeper 是一个分布式的分层文件系统,可以促进客户端之间的松散耦合。
ZooKeeper通过运行多个名为ensemble的ZooKeeper服务器来实现高可用性。
ZooKeeper 用于管理,协调Kafka经纪人。
每个Kafka经纪人都在使用ZooKeeper与其他Kafka经纪人协调。
ZooKeeper服务通知生产者和消费者有关Kafka系统中新代理的存在或Kafka系统中代理的故障。
答案 1 :(得分:0)
Kafka是一种针对高吞吐量进行了优化的分布式消息传递系统。它有一个持久队列,消息被附加到具有磁盘结构的文件,并且即使使用非常适中的硬件也能一致地执行。简而言之,您将使用Kafka将数据加载到大数据集群中,即使使用适度的硬件,您也可以高速执行此操作,因为Kafka具有分布式特性。
关于Zookeeper,它是一个集中式分布式配置服务和大型分布式系统的命名注册表。它是健壮的,因为持久化数据分布在多个节点之间,一个客户端连接到它们中的任何一个,如果一个节点发生故障,则迁移;只要严格的大多数节点正在工作。简而言之,Zookeeper确保您的大数据集群即使其某些节点处于脱机状态也仍然处于联机状态。
答案 2 :(得分:0)
关于卡夫卡,我会补充几件事。
卡夫卡将自己描述为log not a queue。日志是按时间排序的仅附加,完全有序的记录序列。
在严格的数据结构意义上,队列是用于保存数据的FIFO集合,但是一旦将其从队列中取出,就无法将其恢复。 Jaco确实描述它是一个持久队列,但使用不同的术语(队列v.log)可以帮助理解。
Kafka的日志保存到磁盘而不是保存在内存中。 Kafka的设计者之所以选择这个是因为1.他们希望避免在将数据存储在数据结构中时获得的大量JVM开销。他们希望消息能够持续存在,即使Java进程由于某种原因而死亡。
Kafka专为多个消费者(Kafka术语)设计,可以从相同的日志中读取。每个消费者在日志中跟踪自己的偏移量,消费者A可能在偏移量2,消费者B可能在偏移量8等等。跟踪消费者的偏移量消除了卡夫卡方面的许多复杂性。
阅读第一个链接将解释Kafka与其他消息传递服务之间的许多差异。