一.概念

发布订阅,一个发布者发布到消息,所有订阅者都可以接收到

生产消费,一个消息对象只能被一个消费者消费

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总是在一起?的更多相关文章

  1. 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 ...

  2. 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 ...

  3. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十二)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网。

    Centos7出现异常:Failed to start LSB: Bring up/down networking. 按照<Kafka:ZK+Kafka+Spark Streaming集群环境搭 ...

  4. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十一)定制一个arvo格式文件发送到kafka的topic,通过Structured Streaming读取kafka的数据

    将arvo格式数据发送到kafka的topic 第一步:定制avro schema: { "type": "record", "name": ...

  5. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十)安装hadoop2.9.0搭建HA

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  6. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(九)安装kafka_2.11-1.1.0

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  7. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(八)安装zookeeper-3.4.12

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  8. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(三)安装spark2.2.1

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  9. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二)安装hadoop2.9.0

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  10. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十七):kafka manager安装

    一.kafka-manager简介 为了简化开发者和服务工程师维护Kafka集群的工作,yahoo构建了一个叫做Kafka管理器的基于Web工具,叫做 Kafka Manager.这个管理工具可以很容 ...

随机推荐

  1. dart系列之:dart类中的泛型

    目录 简介 为什么要用泛型 怎么使用泛型 类型擦除 泛型的继承 泛型方法 总结 简介 熟悉JAVA的朋友可能知道,JAVA在8中引入了泛型的概念.什么是泛型呢?泛型就是一种通用的类型格式,一般用在集合 ...

  2. scrapy获取当当网中数据

    yield 1. 带有 yield 的函数不再是一个普通函数,而是一个生成器generator,可用于迭代 2. yield 是一个类似 return 的关键字,迭代一次遇到yield时就返回yiel ...

  3. 让textarea根据文本的长度自动调整它的高度

    ... <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR ...

  4. [hdu6600]Just Skip The Problem

    1.直接令x=0,为了判断这一信息,对于所有含有多个1的yi,必然是无用的,答案至少为n且不能含有多位1的y2.令yi=2^(i-1),由此发现一定可以得到x每一位的答案,即答案最多为n.因此,发现方 ...

  5. 【Microsoft Azure 的1024种玩法】七.Azure云端搭建部署属于自己的维基百科

    [简介] MediaWiki是全球最著名的开源wiki程序,运行于PHP+MySQL环境.MediaWiki从2002年2月25日被作为维基百科全书的系统软件,并有大量其他应用实例.MediaWiki ...

  6. 深入理解Redis 数据结构—简单动态字符串sds

    Redis是用ANSI C语言编写的,它是一个高性能的key-value数据库,它可以作用在数据库.缓存和消息中间件.其中 Redis 键值对中的键都是 string 类型,而键值对中的值也是有 st ...

  7. CF513G3 Inversions problem

    考虑记\(f_{i,j,k}\)为\(k\)次操作后,\(i,j\)位置被调换的概率. 那么我们考虑枚举我们要算的答案即\((x,y)\). 那么有\(\frac{n * (n + 1)}{2}\)种 ...

  8. Atcoder Grand Contest 001 F - Wide Swap(拓扑排序)

    Atcoder 题面传送门 & 洛谷题面传送门 咦?鸽子 tzc 来补题解了?奇迹奇迹( 首先考虑什么样的排列可以得到.我们考虑 \(p\) 的逆排列 \(q\),那么每次操作的过程从逆排列的 ...

  9. NFLSOJ 1060 - 【2021 六校联合训练 NOI #40】白玉楼今天的饭(子集 ln)

    由于 NFLSOJ 题面上啥也没有就把题意贴这儿了( 没事儿,反正是上赛季的题,你们非六校学生看了就看了,况且看了你们也没地方交就是了 题意: 给你一张 \(n\) 个点 \(m\) 条边的图 \(G ...

  10. 洛谷 P7116 - [NOIP2020] 微信步数(拉格朗日插值)

    洛谷题面传送门 我竟然独立切掉了这道题!incredible! 纪念我逝去的一上午(NOIP 总时长 4.5h,这题做了我整整 4.5h) 首先讲一下现场我想的 80 分的做法,虽然最后挂成了 65 ...