zookeeper、dubbo、kafka简单了解

2023-11-13

1 zookeeper如何实现高可用
1 zookeeper 多台构成集群实现高可用,有三种角色群首(leader),追随者(follower),观察者(observer)。
Leader作为整个ZooKeeper集群的主节点,负责响应所有对ZooKeeper状态变更的请求。它会将每个状态更新请求进行排序和编号,以便保证整个集群内部消息处理的FIFO
Follower的逻辑就比较简单了。除了响应本服务器上的读请求外,follower还要处理leader的提议,并在leader提交该提议时在本地也进行提交。,leader和follower构成ZooKeeper集群的法定人数,也就是说,只有他们才参与新leader的选举、响应leader的提议。
如果ZooKeeper集群的读取负载很高,或者客户端多到跨机房,可以设置一些observer服务器,以提高读取的吞吐量。Observer和Follower比较相似,只有一些小区别:首先observer不属于法定人数,即不参加选举也不响应提议;其次是observer不需要将事务持久化到磁盘,一旦observer被重启,需要从leader重新同步整个名字空间。

2 zookeeper如何实现负载均衡?
以前接触的负载均衡是通过VIP调度到各个节点。如:nginx+keepalived实现负载均衡和高可用。这个是直接在nginx配置文件中配置好了下面节点的IP:PORT,由nginx实现转发
zookeeper不是这样的,如三台服务构成zookeeper集群,是在服务生产者和服务消费的服务器上,
基本流程:
1) 服务提供者B启动到Zookeeper服务器处进行注册;
2) 服务消费者A启动时,请求Zookeeper服务器获取最新的B服务存活列表,并保存到本地缓存中;
3)A请求B服务器时,根据缓存中的B服务器列表,随机选取一个进行请求。

服务变动:
1) 当B出现异常或人工关闭不能提供服务时,Zookeeper服务器某个节点会探测到B节点的变化,更新本节点B服务器列表;
2) Zookeeper内部节点进行数据同步;
3) 服务消费者A监听到B服务列表的变化,更新本地缓存。

自动重发机制:
B服务挂掉到A缓存更新大约需要3-5s的时间(根据网络环境不同还需仔细测试)。为了保证服务的实时可用,A请求B发生异常时,需要根据服务消费报错信息,处理特定异常进行自动重发。

存在风险和问题
1) 服务发现速度慢的问题,上述描述服务延迟问题。
2) Zookeeper 作为服务发现存在的问题
在分布式系统领域有个著名的CAP定理(C-数据一致性;A-服务可用性;P-服务对网络分区故障的容错性,这三个特性在任何分布式系统中不能同时满足,最多同时满足两个)。
ZooKeeper是个CP的,即任何时刻对ZooKeeper的访问请求能得到一致的数据结果,同时系统对网络分割具备容错性;但是它不能保证每次服务请求的可用性(注:也就是在极端环境下,ZooKeeper可能会丢弃一些请求,消费者程序需要重新请求才能获得结果)。但是别忘了,ZooKeeper是分布式协调服务,它的职责是保证数据(注:配置数据,状态数据)在其管辖下的所有服务之间保持同步、一致;所以就不难理解为什么ZooKeeper被设计成CP而不是AP特性的了,如果是AP的,那么将会带来恐怖的后果(注:ZooKeeper就像交叉路口的信号灯一样,你能想象在交通要道突然信号灯失灵的情况吗?)。而且,作为ZooKeeper的核心实现算法Zab,就是解决了分布式系统下数据如何在多个服务之间保持同步问题的。
保存草稿

3 dubbo
Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。
dubbo能做什么?

1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。

2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。

  1. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

4 dubbo与zookeeper的关系

Dubbo建议使用Zookeeper作为服务的注册中心。
Dbbo是一个框架,用于服务间的调度,服务程序编写使用dubbo做接口,利用dubbo是实现服务服务之间还有zookeeper之间的通讯。

1) Zookeeper的作用:

    zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知道,简单来说就是ip地址和服务名称的对应关系。当然也可以 通过硬编码的方式把这种对应关系在调用方业务代码中实现,但是如果提供服务的机器挂掉调用者无法知晓,如果不更改代码会继续请求挂掉的机器提供服务。 zookeeper通过心跳机制可以检测挂掉的机器并将挂掉机器的ip和服务对应关系从列表中删除。至于支持高并发,简单来说就是横向扩展,在不更改代码 的情况通过添加机器来提高运算能力。通过添加新的机器向zookeeper注册服务,服务的提供者多了能服务的客户就多了。

2) dubbo:

  是管理中间层的工具,在业务层到数据仓库间有非常多服务的接入和服务提供者需要调度,dubbo提供一个框架解决这个问题。

  注意这里的dubbo只是一个框架,至于你架子上放什么是完全取决于你的,就像一个汽车骨架,你需要配你的轮子引擎。这个框架中要完成调度必须要有一个分布式的注册中心,储存所有服务的元数据,你可以用zk,也可以用别的,只是大家都用zk。

3)zookeeper和dubbo的关系:
Dubbo的将注册中心进行抽象,是得它可以外接不同的存储媒介给注册中心提供服务,有ZooKeeper,Memcached,Redis等。
引入了ZooKeeper作为存储媒介,也就把ZooKeeper的特性引进来。首先是负载均衡,单注册中心的承载能力是有限的,在流量达到一定程度的时 候就需要分流,负载均衡就是为了分流而存在的,一个ZooKeeper群配合相应的Web应用就可以很容易达到负载均衡;资源同步,单单有负载均衡还不 够,节点之间的数据和资源需要同步,ZooKeeper集群就天然具备有这样的功能;命名服务,将树状结构用于维护全局的服务地址列表,服务提供者在启动 的时候,向ZK上的指定节点/dubbo/${serviceName}/providers目录下写入自己的URL地址,这个操作就完成了服务的发布。 其他特性还有Mast选举,分布式锁等。

5 kafka与zookeeper

1)Kafka把它的meta数据都存储在ZK上,所以说ZK是必要存在的,没有ZK没法运行Kafka;在老版本(0.8.1以前)里面消费段(consumer)也是依赖ZK的,在新版本中移除了客户端对ZK的依赖,但是broker依然依赖于ZK。

2)kafka是消息队列,zookeeper是服务的控制中心;消费者要访问服务,需要知道现在哪些生产者(对于消费者而言,kafka就是生产者)是可用的,就需要zk的调度。

http://blog.51cto.com/10676568/2133456

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

zookeeper、dubbo、kafka简单了解 的相关文章

  • PR/AE/FCPX比较好用的插件有哪些?

    Beauty Box 磨皮润肤美容插件 Digital Anarchy比较出众的一款视频磨皮美白降噪插件 支持系统 windows Mac 软件版本 PR AE CS6 2023 Davinci Resolve 达芬奇11以上 FCPX 1
  • 机器学习二:支持向量机

    支持向量机 1 介绍 2 对偶问题 3 非线性数据 3 1 核函数与核技巧 3 1 1 数学解释 3 1 2 几种常用的核函数 4 SVM 响应离群点 4 1 软间隔 4 2 正则化 4 3 参数调整 4 3 1 SVM C Paramet
  • OpenGL学习书籍推荐

    1 opengl 红宝书 2 Nehe的Opengl教程 网上的文章 能形成一个完整系列的就是 Nehe的 有点老 不过不影响学习理论 3 知乎上的这个帖子也提供了不少思路 https www zhihu com question 2416
  • 汉堡王什么汉堡好吃_汉堡王9款汉堡测评,牛肉和鸡肉你喜欢哪个?

    从第一次吃汉堡王到现在已经好久了 数了一下 他们家的汉堡我已经吃了9种了 虽然还没有全部吃过一遍 今天就来盘点一下汉堡王的汉堡吧 小皇堡 第一次吃的就是小皇堡 当时不是很能吃得惯 所以从那时起就有点不太敢尝试皇堡系列 后来真香了 里面有西红
  • [中奖]第九届“泰迪杯”挑战赛A题

    问题概述 题目1如下 赛题有2个点 分别是 确定数据指标 即确定哪些特征是决定财务造假与否的关键特征 预测造假公司 训练模型 然后跑测试数据即可 预处理 首先使用missingno2 对全局数据进行观测 看一看缺失值等情况 然后删去无用的特
  • retrofit应用详解与源码解析--源码解析

    本文出自门心叼龙的博客 属于原创类容 未经允许 不得转载 本专栏的同步视频教程已经发布到CSDN学院 https edu csdn net course detail 30408 上一篇文章我们通过12个小案例 给大家演示了retrofit
  • Ado.net批量插入数据

    采用的是SqlBulkCopy方法 数据库是sql server 示例代码地址 https gitee com Alexander360 LearnAdoNet SqlBulkCopy批量插入的方法如下 包括list转datatable方法
  • Python书写的格式规范

    Python书写的格式规范 1 英文版Python书写格式 2 中文版Python书写规范
  • C++之const类成员变量,const成员函数,const指针

    https www cnblogs com cthon p 9178701 html 结合下面这个链接观看更佳 讲常量指针和指向常量的指针的 https www cnblogs com lihuidashen p 4378884 html
  • CnOCR 使用教程

    目录 一 简介 二 使用教程 三 效果展示 一 简介 CnOCR 是 Python 3 下的文字识别 Optical Character Recognition 简称OCR 工具包 支持简体中文 繁体中文 部分模型 英文和数字的常见字符识别
  • Non-parseable settings C:\Users\xxxx.m2\settings.xml:错误 maven项目下载jar是空包解决方案

    在用maven项目下载我们要引入相对应的jar时候控制台报错 Non parseable settings C Users xxxx m2 settings xml expected START TA G or END TAG not TE
  • [python2.7版本] pip安装包 或者 pip升级pip版本出现此错误

    File tmp pip build vD3Ntt pip setup py line 7 def read rel path str gt str SyntaxError invalid syntax Command python set
  • 左手系和右手系转换最最最简便方法

    左手系和右手系转换最最最简便方法就是交换Y Z轴 只需一个矩阵变换 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 不需翻转Z轴 不需转置矩阵 不需修改缠绕方向 既可用于转换模型坐标 又可用于世界矩阵 视矩阵 实在是模型转换
  • 测试用例设计白皮书--边界值分析方法

    测试用例设计白皮书 边界值分析方法Author Vince 来源 http blog csdn net vincetest 一 方法简介1 定义 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法 通常边界值分析法是作为对等价类
  • mysql日期查询

    今天 select from 表名 where to days 时间字段名 to days now 昨天 SELECT FROM 表名 WHERE TO DAYS NOW TO DAYS 时间字段名 lt 1 近7天 SELECT FROM
  • 开源服务器日志实时查看系统,开源日志管理系统

    开源日志管理系统 内容精选 换一换 鲲鹏工程师培训及认证为客户提供鲲鹏认证伙伴基于open系开源内核构建的商业软件培训 包含商业软件介绍 特性描述 操作使用 开发指导等内容 来自 其他 MindX DL Sample的系统架构如图1所示 各
  • nodejs typescript express mongodb 搭建简易服务器

    安装依赖 npm i express mongoose ts node typescript nodemon types express types node express session types express session 新建
  • java编译遇到的错误: 无法从静态上下文中引用非静态 变量 this

    记住这句话 静态方法不能引用非静态变量 我遇到的是因为将Student 放到了Test类当中去了 解决的办法 1 Student类写到Test外边去 2 Student定义为静态类 package cn sxt oo1 public cla
  • 设计模式----状态模式UML和实现代码

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 什么是状态模式 状态模式 State 定义 当一个对象的内在状态改变时允许改变其行为 这个对象看起来像是改变了其类 状态模式主要解决的是当控制一个对象状态的条件表达式过

随机推荐

  • Python中基础使用及Numpy、Scipy、Matplotlib 使用教程

    本文主要根据 斯坦福CS231n课程的Python 教程进行整理 原文地址为http cs231n github io python numpy tutorial 官方Python指南网址https www python org doc P
  • stm32系列单片机介绍

    一 产品介绍 stm32是基于ARM Cortex 内核的 32位微控制器和微处理器 常见的内核有 Cortex M0 代表型号STM32F0 STM32L0 Cortex M0 代表型号STM32C0 23年新推出 主要针对低成本 Cor
  • vue中使用FullCalendar实现自由拖拽日历活动(包含获取当前视图开始时间与结束时间,动态渲染接口日历活动数据)

    具体实现效果图如图所有 1 安装FullCalendar相关插件 npm install save fullcalendar core npm install save fullcalendar interaction npm instal
  • CS229学习笔记(3)逻辑回归(Logistic Regression)

    1 分类问题 你要预测的变量 y y y是离散的值 我们将学习一种叫做逻辑回归 Logistic Regression 的算法 这是目前最流行使用最广泛的一种学习算法 从二元的分类问题开始讨论 我们将因变量 dependent variab
  • 基于深度学习的图像配准

    人的眼睛或者相机的FOV 视场 有限 所以很难将景色尽收眼底 医疗影像设备同样受限于FOV的大小 很难同时扫描整个解剖部位 这时就需要拼接算法将不同角度拍摄的部分图像拼成一幅全景图 我之前写过一篇关于图像拼接的文章 图像拼接并不像你想的那么
  • 关于链表的建立与操作(c++实现)

    关于链表的建立与操作 目录 1 链表的定义 2 单链表的基本操作 3 循环链表及其操作 4 双向链表及其操作 5 用数组模拟链表 一 链表的定义 因为线性表是静态线性的存储结构 所以为了方便动态地对数据进行处理 我们引入链表这一数据结构 因
  • elk笔记13--Queries-geo queries

    elk笔记13 Queries geo queries 1 geo查询简介 2 geo 查询案例 3 说明 1 geo查询简介 geo queries 地理位置查询 支持2类geo数据 分别为geo point 和geo shape 2中类
  • 16-数据结构-图的存储结构

    简介 主要为图的顺序存储和链式存储 其中顺序存储即邻接矩阵的画法以及代码 邻接矩阵又分为有权图和无权图 区别就是有数据的地方填权值 无数据的地方可以填0或者 而有权图和无权图 又细分为有向图和无向图 无向图为对称矩阵 因为没有方向可言 出度
  • nRF52832 — 使用nRF52832的I2S播放音频

    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX 作 者 文化人 XX 联系方式 XX 版权声明 原创文章 欢迎评论和转载 转载时能告诉我一声就最好了 XX 要说的话
  • VSCode命令行常用快捷操作

    一 VSCode基本设置 1 打开命令面板 F1 或 Command Shift P 2 将VSCode安装到系统环境变量 打开命令面板 搜索PATH 选择在PATH中安装code命令 然后重启终端就可以生效 以后在命令行就可以通过code
  • uniapp软键盘把界面顶起问题解决

    pages json文件加上解决 app plus softinputMode adjustResize pages path pages index index style navigationBarTitleText 中奥一卡通 app
  • GoJS-FlowChart样例代码分析

    var go GraphObject make 别名 方便使用 myDiagram go Diagram myDiagramDiv 通过id指定画布绑定的div LinkDrawn showLinkLabel 监听LinkDrawn事件 其
  • Canvas-drawImage无法绘图,出现空白的解决办法

    目录 文章目录 问题剖析 解决办法 例子代码 测试样例 问题剖析 在操作drawImage 函数时 经常会出现调取正常 但canvas绘制出现空白的情况 这种情况 原因可以归为 浏览器在加载图片时 图片尚未加载完毕 便开始绘图 主要原因为
  • 本地项目上传到gitlab上

    1 gitlab上新建项目 2 本地操作 进入到项目目录 打开git操作命令窗口 鼠标右键选择Git Bash Here 1 将git初始化至该目录下 会生成 git配置文件 执行命令 git init 2 将远程的仓库分支来取到本地 执行
  • Qt信号详解

    QAbstractButton clicked 按下松开后执行 pressed 按下后执行 released 松开后执行 clicked bool checked 需要选中checkable属性 每次点击checked的值都会切换 可以使用
  • Linux 下配置JDK 并运行springboot项目进行访问 Tomcat的安装

    前言 记忆 1 步骤 一 JDK安装 我们开发java程序必须要的环境 1 下载JDK rpm 去oralce 官网下载即可 百度jdk即可 2 安装java环境 检测当前系统是否存在java环境 java version 如果有的话就需要
  • 机器学习入门教学——人工智能、机器学习、深度学习

    1 人工智能 人工智能相当于人类的代理人 我们现在所接触到的人工智能基本上都是弱AI 主要作用是正确解释从外部获得的数据 并对这些数据加以学习和利用 以便灵活的实现特定目标和任务 例如 阿尔法狗 智能汽车 简单来说 人工智能使机器像人类一样
  • 后端转前端,该如何快速学习

    后端转前端还是比较容易的 学习难度降低了 多花点时间实操 基本可以接手项目 首先初学者要知道web前端工程师的目前核心技术 主要有HTML5 CSS JavaScript JQuery Ajax等技术 而且想要成为一名优秀的web前端工程师
  • 4月13面试网络工程师实习岗位的感想

    第一个自我介绍 说一下自我介绍吧 面试官一来就叫我自我介绍 这是必须的 然后我就说了一下我叫谁 我现在读大几 学什么专业 然后说一下平时爱听音乐 打球啊 爬山啊 爱看电影 然后说到爱看电影 面试官就笑了 然后就行了 就开始问问题了 聊聊天了
  • zookeeper、dubbo、kafka简单了解

    1 zookeeper如何实现高可用 1 zookeeper 多台构成集群实现高可用 有三种角色群首 leader 追随者 follower 观察者 observer Leader作为整个ZooKeeper集群的主节点 负责响应所有对Zoo