kafka zookeeper简单原理详解

kafka是一种消息中间件

1、消息中间件作用什么

最重要的功能:解耦、异步、并行

2、为什么要用消息中间件

后续在加还没有整理完…

3、kafka结构

Topic是什么?

一个Topic可以认为存储一类消息
  在这里插入图片描述

程序A产生了一类消息,然后把这类消息放在kafka group中 ,这由程序A产生的这个消息就叫一个topic,B要想获得A的消息,就是要订阅这个消息,才能成为这个topic的消费者

每个topic将被分成多个partition(区)
     在这里插入图片描述

如果Topic有个1-100 我把1-33分给了P1,34-90分给P2,91-100分给P3 .这样组合在一块才是1-100的数据

每个topic将被分成多个partition(区),此外kafka还可以配置partitions需要备份的个数(replicas) ----Topic由3个partition组成的(p1,p2,p3) ,每个partition还有备份

在这里插入图片描述
  基于replicated方案,那么就意味着需要对多个备份进行调度;每个partition都有一个server为"leader";leader负责所有的读写操作,如果leader失效,那么将会有其他follower来接管(成为新的leader);follower只是单调的和leader跟进(p1’同步p1的数据),同步消息,保证数据一致,即可…由此可见作为leader的server承载了全部的请求压力,因此从集群的整体考虑,有多少个partitions就意味着有多少个"leader",kafka会将"leader"均衡的分散在每个实例上,来确保整体的性能稳定

上面的图有3个Partitions,每个Partitions,都由两个replicated,在他们两个选一个leader

leader、follower:kafka会选择分区内的一个副本作为leader副本,而其他副本作为follower副本,只有leader副本才能处理读写请求,即producer和consumer只跟leader副本交互,follower副本只是从leader上复制数据

在这里插入图片描述
在这里插入图片描述
其中partition leader的位置,这个leader是谁,选举放到哪个主机上kafka本身是不存的,kafka只是负责选举,是存在(host:port)注册在zookeeper中

生产一个数据,Partitions在server里有一个appendlog文件,我写一个第一个消息,可能会记录这个p1里,我写第二个消息,可能记录在p2里面,我写第三个里面会记录p3里,他们三个在一起才能保证数据是正确,每写一个消息进来会有一个offset就是偏移量,不管怎么写,读还是一个完整的消息,对这个topic进行读
在这里插入图片描述

问 topic有几个partition,和有几个replicated谁决定呢?

答: Producer将消息发布到指定的Topic中,同时Producer也能决定将此消息归属于哪个partition;比如基于"round-robin"方式或者通过其他的一些算法等.

kafka的配置文件中配置了 partition的数量和 replication的数量
在这里插入图片描述
但是这个是默认值,创建topic时不指定partition数量的话才会使用这个默认值比如我们拿一个创建topic的例子来说:
例子:
创建一个叫做 test的topic,它只有两个分区,一个副本

在这里插入图片描述

zookeeper原理 (例子5个zookeeper组成的集群)

  1. 当一个kafkabroker启动后(启动两个),首先会向zookeeper注册自己的节点信息(临时znode),同时当broker和zookeeper断开连接时,此znode也会被删除.
  2. 其中partition leader的位置(host:port)注册在zookeeper中

zk认为有2个kafka,集群有2个节点组成

zk简介

•zooKeeper是一个分布式的,开放源码的分布式应用程序协调服务

•zookeeper其实就是一个软件,所有安装了zookeeper的服务器都叫 zookeeper server

• zookeeper server 还分为两类角色(选举机制),由 leader 和 follower 组成,如果leader挂掉,会有选举机制,follower直接替换leader ,leader只有一个,剩下的都是follower

• zookeeper 的所有服务器中的所有数据结构(树形结构)是完全相同的,就是说我搭建一个zookeeper集群,集群里面所有机器的数据是一样的一共有5个zk集群,(我把一些信息写到1号zk里,剩余其他4个就会同步数据)

• 数据是树形结构的,与linux目录结构是一样一样的,zk的每个数据目录就是一个znode

• 我需要运行几个ZooKeeper? 你运行一个zookeeper也是可以的,但是在生产环境中,你最好部署3,5,7个节点。部署的越多,可靠性就越高,当然最好是部署奇数个,偶数个不是不可以的,但是zookeeper集群是以宕机个数过半才会让整个集群宕机的,所以奇数个集群更佳

#下载

https://zookeeper.apache.org/

[root@bogon ~]# mv zookeeper-3.4.14 /usr/local/
[root@bogon ~]# cd /usr/local/zookeeper-3.4.14/

root@bogon zookeeper-3.4.14]# cd conf

[root@bogon conf]# mv zoo_sample.cfg zoo.cfg

[root@bogon conf]# pwd
/usr/local/zookeeper-3.4.14/conf

在这里插入图片描述

tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。

tdataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。

tclientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

下面这两个可以不需要掌握:(默认值就好)

tinitLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒

tsyncLimit:这个配置项标识 Leader 与Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是2*2000=4 秒

启动

[root@bogon conf]# /usr/local/zookeeper-3.4.14/bin/zkServer.sh start

netstat -tulnp|grep java #要是有2181端口就是启动起来了

QuorumPeerMain #是zookeeper 不能把它禁掉

#安装 kafka

http://kafka.apache.org/downloads

[root@bogon config]# vim server.properties

更改了监听地址、更改连接zk的地址

在这里插入图片描述

在这里插入图片描述

#启动

[root@bogon kafka_2.11-2.1.1]# /var/www/html/kafka_2.11-2.1.1/bin/kafka-server-start.sh /var/www/html/kafka_2.11-2.1.1/config/server.properties

nohup /var/www/html/kafka_2.11-2.1.1/bin/kafka-server-start.sh /var/www/html/kafka_2.11-2.1.1/config/server.properties >> /var/www/html/kafka_2.11-2.1.1/output.log 2>&1 &

chmod a+x startup.sh

netstat -tulnp |grep java

参考文章

https://blog.csdn.net/luanpeng825485697/article/details/81036028

https://blog.csdn.net/laojiaqi/article/details/79034798

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟伟哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值