为什么kafka和zk总是在一起?
一.概念
发布订阅,一个发布者发布到消息,所有订阅者都可以接收到
生产消费,一个消息对象只能被一个消费者消费
kafka是生产者,zookeeper是消费者
有3个微服务,聚合形成一个统一的业务层
但是每个微服务都需要互相知道对方的服务地址。这样每个微服务地址修改,其他微服务的配置文件都需要修改,这样就是耦合的。
解耦就是服务注册中心,统一管理所有的微服务信息
每个微服务调用接口,统一从服务注册中心获取,这样每个微服务地址修改,只需要向注册中心报备,其他微服务什么都不用改,这样就是解耦的。
那么有个角色就是“服务注册中心”,这个可以用 Zookeeper、Eureka、Consul 作为实现方案
二.例子
zk是用于消息列队的,分布式,调节各个程序之间的通信和操作
例如一个网站 注册分几部
1.用户点击注册,网站发请求到后端服务器
2.后端服务器收到后,给用户发个邮件
3.用户点击邮件进行验证,证明是他本人
4.将这个用户添加到数据中
这一套下来用户才算注册了,才能正常登陆,但有几个问题:
1.用户如果当前不方便验证邮件,那就没法注册了,显然不合理
2.当这个程序的数据库地址变动了,就需要在代码里修改,让程序知道最新的数据库地址,这样会很麻烦
3.这显然不合理
就引出了消息列队的作用 就是异步操作 程序收到请求 直接跳过2和3 先写到数据库 让用户可以登录 后面再发邮件 这是异步的 异步就是消息列队
也就是用户可以登录后 过段时间在验证邮件 不然超过24小时或者一些时间 不验证就禁止登录 如此
那就需要多个程序来完成这个任务 就是分布式 A程序负责接收请求 写到数据库 B程序负责发邮件 验证邮件,如果超时不验证 告诉A程序禁止账号
那你可以选择搞一个C程序 协调这2 一个注册请求进来 调用A注册 再调用B进行发邮件啥的
zk就是这个C程序 他将请求进行拆分 放到一个箱子里 箱子1号位置是用户1的注册请求,2号位置是用户3的邮件请求, zk依次将这些请求发到对应的小程序里
因为是异步的 所以不着急 就好像同时3用户注册 用户A点击注册了,可能10分钟后验证邮件才发过来
kafka是一个篮子 将这些请求装进去 然后依次交给zk zk将注册请求给A程序,验证请求给B程序
如果请求太多 篮子放不下 就堵塞了 就需要加kafka, 如果zk解决不过来了 那又堵塞了 就要加zk
kafka是生产者 他储存请求 zk是消费者 对请求进行处理
zk也是冗余作用的 比如A程序可以有10个 他做负载均衡 也做备份 当A1程序挂了 就把请求给A2
zk是中转站 他将各种请求异步的给各种其它程序 但要求是异步的请求
如果是比较严格的 例如打钱给别人 多个程序验证 就得同步 异步会出问题
Pro push消息到broker里面,然后会记录一个信息,(类似存储位置),给zk记录起来,然后consum消费时候先去zk里问他要数据存储的节点和位置。
取到信息返回,zk在这里面起到通讯作用,broker是kafka的存储,zk执行事物时候一般先把消息给leader,然后leader去推送,comsuer取消息时候是pull。
为什么kafka和zk总是在一起?的更多相关文章
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十一)NIFI1.7.1安装
一.nifi基本配置 1. 修改各节点主机名,修改/etc/hosts文件内容. 192.168.0.120 master 192.168.0.121 slave1 192.168.0.122 sla ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十三)kafka+spark streaming打包好的程序提交时提示虚拟内存不足(Container is running beyond virtual memory limits. Current usage: 119.5 MB of 1 GB physical memory used; 2.2 GB of 2.1 G)
异常问题:Container is running beyond virtual memory limits. Current usage: 119.5 MB of 1 GB physical mem ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十二)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网。
Centos7出现异常:Failed to start LSB: Bring up/down networking. 按照<Kafka:ZK+Kafka+Spark Streaming集群环境搭 ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十一)定制一个arvo格式文件发送到kafka的topic,通过Structured Streaming读取kafka的数据
将arvo格式数据发送到kafka的topic 第一步:定制avro schema: { "type": "record", "name": ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十)安装hadoop2.9.0搭建HA
如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(九)安装kafka_2.11-1.1.0
如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(八)安装zookeeper-3.4.12
如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(三)安装spark2.2.1
如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二)安装hadoop2.9.0
如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十七):kafka manager安装
一.kafka-manager简介 为了简化开发者和服务工程师维护Kafka集群的工作,yahoo构建了一个叫做Kafka管理器的基于Web工具,叫做 Kafka Manager.这个管理工具可以很容 ...
随机推荐
- 一文分析 Android现状及发展前景
Coding这些年,一直低头"搬砖",好像从未仔细审视过Android的发展现状,亦未好好思考Android的发展前景."低头干活,还要抬头看路",写一篇文章简 ...
- 分布式配置系统Apollo如何实时更新配置的?
引言 记得我们那时候刚开始学习Java的时候都只是一个单体项目,项目里面的配置基本都是写在项目里面的properties文件中,比如数据库配置啥的,各种逻辑开关,一旦这些配置修改了,还需要重启项目这修 ...
- [hdu6997]愿望幽灵
约定:$[x^{n}]F(x)$表示多项式$F$的$n$次项系数 对于多项式$F$,定义$F$的复合逆$\hat{F}$为满足$F( ...
- [at4631]Jewels
如果要选某颜色,必然会选该颜色最大的两个,那么不妨将这两个宝石权值修改为两者的平均数,显然不影响两者的和,也即不影响答案 接下来,将所有宝石按权值从大到小排序,并在权值相同时按颜色编号从小到大(使颜色 ...
- 史上最俗的MODBUS介绍
如今网购正深深地改变着人们的生活,以前买东西要逛商场,先找楼层导购,再逛到相应柜台,接着愉快购物,选好东西后经过一番讨价还价,最后付钱拿货走人,这些都是稀松平常的场景.可是,如果没有实际看见东西,只在 ...
- Windows系统及硬件信息读取
Windows桌面端开发常常会需要读取系统信息或硬件信息作为用户标识,比如用于确认该设配是否已经激活程序.也可以使用随机生成的UUID来作为唯一标识,但是如果重装系统或重装软件都有可能导致标识丢失,因 ...
- MySQL 在线开启&关闭GTID模式
MySQL 在线开启&关闭GTID模式 目录 MySQL 在线开启&关闭GTID模式 基本概述 在线开启GTID 1. 设置GTID校验ENFORCE_GTID_CONSISTENCY ...
- C/C++ Qt Tree与Tab组件实现分页菜单
虽然TreeWidget组件可以实现多节点的增删改查,但多节点操作显然很麻烦,在一般的应用场景中基本上只使用一层结构即可解决大部分开发问题,TreeWidget组件通常可配合TabWidget组件,实 ...
- Mac Maven 安装及配置
一.下载 打开 Maven 官方下载页面:https://maven.apache.org/download.cgi#,点击下载链接即可开始下载: 以 Maven 3.8.4 为例,解压后可以 ...
- SNPEFF snp注释 (添加自己基因组)
之间介绍过annovar进行对snp注释,今天介绍snpEFF SnpEff is a variant annotation and effect prediction tool. It annota ...