Zookeeper、Nacos、Dubbo、Kafka四者关系
发布网友
发布时间:2024-09-28 03:29
我来回答
共1个回答
热心网友
时间:2024-12-02 10:56
hello大家好,今天跟大家说一说Zookeeper、Nacos、Dubbo、Kafka这四者的关系。
首先分下了解下:
Zookeeper
Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高。
Nacos
Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理。Nacos 是 Dubbo 生态系统中重要的注册中心实现。
Dubbo
Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。
Kafka
Kafka是最初由LinkedIn公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于Zookeeper协调的分布式消息系统。
它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:
用scala语言编写,LinkedIn于2010年贡献给了Apache基金会并成为顶级开源项目。
Zookeeper与Nacos
1、配置中心
Nacos和Zookeeper都可以作为配置中心,做一些可以实时变化的配置数据存储,然后实时更新线上数据。
区别:存储和数据更新
Nacos:依赖Mysql数据库做数据存储,当有数据更新的时候,直接更新数据库的数据,然后将数据更新的信息异步广播给Nacos集群中所有服务节点数据变更,再由Nacos服务节点更新本地缓存,然后将通知客户端节点数据变化。
Zookeeper:利用zk的树型结构做数据存储,当有数据更新的时候使用过半机制保证各个节点的数据一致性;然后通过zk的事件机制通知客户端。
最大的区别就是服务器存储位置不同,它们分别采用mysql和zk本身存储
消息发送,一个有采用过半机制保持一致性,另外一个异步广播,通过后台线程重试保证。
2、注册中心
Nacos:nacos支持两种方式的注册中心,持久化和非持久化存储服务信息。
Zookeeper:利用zk的树型结构做数据存储,服务注册和消费信息直接存储在zk树形节点上,集群下同样采用过半机制保证服务节点间一致性
Zookeeper与kafka
1、Kafka把它的meta数据都存储在ZK上,所以说ZK是必要存在的,没有ZK没法运行Kafka;在老版本(0.8.1以前)里面消费段(consumer)也是依赖ZK的,在新版本中移除了客户端对ZK的依赖,但是broker依然依赖于ZK。
2、kafka是消息队列,Zookeeper是服务的控制中心;消费者要访问服务,需要知道现在哪些生产者(对于消费者而言,kafka就是生产者)是可用的,就需要zk的调度。
Zookeeper与bbo
Dubbo建议使用Zookeeper作为服务的注册中心。
Dubbo是一个框架,用于服务间的调度,服务程序编写使用bbo做接口,利用bbo实现服务与服务之间还有Zookeeper之间的通讯。
Zookeeper的作用:
Zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知道,简单来说就是ip地址和服务名称的对应关系。当然也可以通过硬编码的方式把这种对应关系在调用方业务代码中实现,但是如果提供服务的机器挂掉调用者无法知晓,如果不更改代码会继续请求挂掉的机器提供服务。
bbo:
它是管理中间层的工具,在业务层到数据仓库间有非常多服务的接入和服务提供者需要调度,bbo提供一个框架解决这个问题。
注意:
这里的bbo只是一个框架,这个框架中要完成调度必须要有一个分布式的注册中心,储存所有服务的元数据,你可以用zk,也可以用别的。