Kafka是由开发的一个平台由和编写。该项目的目标是为处理实时数据提供一个统一、高吞吐、低延迟的平台其持久化层本质上是一个“按照分布式事务日志架构的大规模發布/订阅消息队列”,这使它作为企业级基础设施来处理流式数据非常有价值此外,Kafka可以通过Kafka Connect连接到外部系统(用于数据输入/输出)並提供了Kafka Streams——一个流式处理。
zookeeper在分布式集群的作用主要集中在:
- 数据发布与订阅(配置中心)
即软件负载均衡最典型的是消息中间件的生产、消费者负载均衡。 常见的是发布者将自己的地址列表寫到zookeeper的节点上然后订阅者可以从固定名称的节点获取地址列表,链接到发布者进行相关通讯 这个利用的是zookeeper的watcher注册和异步通知机制,能夠很好的实现分布式环境中不同系统间的通知与协调实现对数据变更的实时处理。
发布与订阅模型即所谓的配置中心,顾名思义就是讲发布者将数据发布到zk节点上共订阅者动态获取数据,实现配置的集中式管理和动态更新例如,全局的配置信息服务服务框架的地址列表就非常适合使用。- 集群管理与Master选举
分布式锁这个主要得益于zookeeper数据的强一致性,利用的是临时节点锁服务分为两类,一個是独占锁另一个是控制时序。
集群管理比如在线率,节点上线下線通知这些Master选举可以使用临时顺序节点来实现。
- 独占是指所有的客户端都来获取这把锁,最终只能有一个获取到用的是临时节点。
- 控制时序所有來获取锁的客户端,都会被安排得到锁只不过要有个顺序。实际上是某个节点下的临时顺序子节点来实现的
- 一种是FIFO,这个就是使用临時顺序节点实现的和分布式锁服务控制时序一样。
- 第二种是等待队列的成员聚齐之后的才同意按序执行实际上,是在队列的节点里首先创建一个/queue/num节点并且赋值队列的大小。这样我们可以通过监控队列节点子节点的变动来感知队列是否已满或者条件已经满足执行的需要这种,应用场景是有条件执行的任务条件齐备了之后任务才能执行。
Kafka使用zookeeper作为其分布式协调框架很好的将消息生产、消息存储、消息消费的过程结合在一起。同时借助zookeeperkafka能够生产者、消费者和broker在内的所以组件在无状态的情况下,建立起生产者和消费者的订阅关系并實现生产者与消费者的负载均衡。