承德网站制作报价,wordpress好用的模板下载地址,内蒙做网站,制作网站图文教程#xff08;一#xff09;kafka
1、kafka3.0之前依赖于zookeeper
2、kafka3.0之后不依赖zookeeper#xff0c;元数据由kafka节点自己管理
#xff08;二#xff09;zookeeper
1、zookeeper是一个开源的、分布式的架构#xff0c;提供协调服务#xff08;Apache项目一kafka
1、kafka3.0之前依赖于zookeeper
2、kafka3.0之后不依赖zookeeper元数据由kafka节点自己管理
二zookeeper
1、zookeeper是一个开源的、分布式的架构提供协调服务Apache项目
1基于观察者模式涉及的分布式服务管理架构
2存储和管理数据分布式节点上的服务接受观察者的注册一旦分布式节点上的数据发生变化由zookeeper负责同时分布式节点上的服务
2、zookeeper分为领导者和追随者leader、follower组成的集群
1只要有一半以上的集群存活zookeeper集群就可以正常工作适用于安装奇数台的服务集群
2全局数据一致每一个zookeeper每一个几点都保存相同的数据维护监控服务的数据一致
3数据更新的原子性要么都成功、要么都失败
4实时性只要有变化立即同步 3、zookeeper的应用场景记
1统一命名服务在分布式的环境下对所有的应用和服务及女性统一命名
2统一配置管理配置文件同步kafka的配置文件被修改可以快速同步到其他节点
3统一集群管理重点实时掌握所有节点的状态
4服务器动态上下线
5实现负载均衡把访问的服务器的数据发送到访问最少的服务器处理客户端的请求
4、zookeeper的选举机制领导者和追随者
例3台服务器leader一旦确定后续的服务器都是追随者
1A先启动发起第一次选举投票给自己只有1票不满半数A的状态是looking
2B启动再发起一次选举A和B分别投自己一票交换选票信息myidA发现B的myid比A大A的这一票转而投给BA 0;B 2没有半数以上结果A、B会进入lookingB有可能成为leaderC也就成为follower
3C启动C的myid最大A和B都会把票投给CA0;B0;C3C的状态变为leaderA和B变成follower
4只有两种情况会重新开启选举
①初始化的情况会产生选举
②服务器之间和leader丢失了连接状态
*若leader已存在建立间接即可
*若leader不存在
服务器id的胜出
EPOCH大直接胜出
EPOCH相同事务ID大的胜出
*EPOCH是每个leader任期时的代号没有leader大家的逻辑地位相同每投完一次之后数据是递增
*事务id是标识服务器的每一次变更每变更一次事务id就变化一次
*服务器id每一个zookeeper集群中的机器都有一个id每台机器不重复和myid保持一致
三部署zookeeper 20.0.0.10 zookeeperkafka2核4G 20.0.0.20 zookeeperkafka2核4G 20.0.0.30 zookeeperkafka2核4G
1、部署环境
升级Javayum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel cp zoo_sample.cfg zoo.cfg 2、修改zookeeper的配置文件 server.120.0.0.10:3188:3288
1表示每个zookeeper集群的初始myid
20.0.0.10服务器的ip地址
3188领导者和追随者之间交换信息的端口内部通信的端口
3288一旦leader丢失响应开启选举3288就是用来执行选举时的服务器之间的通信端口
1创建目录 2分配myid 3编写zookeeper的启动脚本
chmod x /etc/init.d/zookeeper 添加到系统服务中chkconfig --add zookeeper 四消息队列kafka
1、为什么要引入消息队列MQ
1他也是一个中间件在高并发环境下同步请求来不及处理来不及处理的请求会形成堵塞。比方说数据库就会形成行锁或者表锁请求线程满了超标了too much connection导致整个系统雪崩
2、消息队列的作用异步处理请求、流量削峰应用解耦、可恢复性、缓冲、峰值的处理能力、异步通信
1耦合在软件系统当中修改一个组件需要修改所有其他组件高度耦合
2低度耦合修改其中一个组件对其他影响不大无需修改所有
3解耦只要通信保证其他的修改不影响整个集群每一个组件可以独立的扩展修改降低组件之间的依赖性依赖点就是接口约束通过不同的端口保证集群通信
4可恢复性系统当中的有一部分组件消失不影响整个系统也就是说在消息队列当中即使有一个处理消息的进程失败一旦恢复还可以重新加入到队列当中继续处理消息
5缓冲可以控制和优化数据经过系统的时间和速度解决生产消息和消费消息处理速度不一致的问题
6峰值的处理能力消息队列在峰值的情况下能够顶住突发的访问压力核心作用避免专门为了突发情况而对系统进行修改
7异步通信允许用户把一个消息放入队列但是不立即处理等用户想处理的时候再处理 3、消息队列的模式
1点对点一对一消息的生产者发送消息到队列中消费者从队列中提取消息消费者取完之后队列中被提取的消息将会被移除后续的消费者不能再继续消费队列当中的消息消息队列可以有多个消费者但是一个消息只能由一个消费者提取RABBITMQ
2发布/订阅模式一对多观察者模式消费者提取数据之后队列中的消息不会被清除。生产者发布一个消息到主题所有消费者都是通过主题获取消息
组件
①主题topictopic类似一个数据流的管道生产者把消息发布到主题消费者从主题中订阅数据获取数据主题可以分区每个分区都有自己的偏移量
②分区partition。每个主题都可以分成多个分区每个分区是数据的有序子集分区可以允许kafka进行水平扩展以处理大量数据。消息在分区按照偏移量存储消费者可以独立读取每个分区的数据存储生产者发布的数据
③偏移量是每个消息在分区中唯一的标识消费者可以通过偏移量来跟踪获取已读或者未读消息的位置也可以提交偏移量来记录已处理的信息
④生产者producer生产者把数据发送给kafka的主题当中负责写入消息
⑤消费者consumer从主题当中读取数据消费者可以是一个也可以是多个每个消费者有一个唯一的消费者组idkafka通过消费者实现负载均衡和容错性
⑤经纪人broker每个kafka节点都有一个broker每一个负责一台kafka服务器id唯一处理存储主题分区当中的数据处理生产和消费者的请求维护元数据zookeeper
⑥zookeeperzookeeper负责保存元数据元数据就是topic的相关信息发布在哪台主机上指定了多少分区以及副本数偏移量。
zookeeper默认自建的主题_consumer_offsets。
*3.0之后不依赖zookeeper的核心元数据由kafka节点自己管理
五kafka的工作流程
1、至少一次语义只要消费者进入确保消息至少被消费一次
六zookeeperkafka2.7.0——配置kafka2.7.0
2181zookeeper对外服务的端口
9092kafka的默认端口
1、安装kafka 2、声明环境变量
export KAFKA_HOME/opt/kafka
export PATH$PATH:$KAFKA_HOME/bin 3、修改配置文件 4、设置kafka的启动脚本 chmod x /etc/init.d/kafka
chkconfig --add kafka
service kafka start 5、设置主机映射否则识别不到 6、创建主题在kafka的bin目录下执行命令
kafka-topics.sh --create --zookeeper 20.0.0.10:2181,20.0.0.20:2181,20.0.0.30:2181 --replication-factor 2 --partitions 3 --topic hyde1 创建主题创建主题创建主题必须创建分区指定副本
1在kafka的bin目录下是所有kafka可执行命名文件
2--zookeeper指定的是zookeeper的地址和端口保存kafka的元数据
3--replication-factor 2指定分区的副本数实现冗余
4partition 3 指定主题的分区数
5--topic test1 指定主题的名称。
查看主题的详细信息
kafka-topics.sh --describe --zookeeper 20.0.0.10:2181,20.0.0.20:2181,20.0.0.30:2181 kafka-topics.sh --describe --zookeeper 20.0.0.10:2181,20.0.0.20:2181,20.0.0.30:2181 --topic hyde1 7、发布消息和消费消息
1发布消息
kafka-console-producer.sh --broker-list 20.0.0.10:9092,20.0.0.20:9092,20.0.0.30:9092 --topic hyde1 2消费消息
①全部获取
kafka-console-consumer.sh --bootstrap-server 20.0.0.10:9092,20.0.0.20:9092,20.0.0.30:9092 --topic hyde1 --from-beginning ②实时获取
kafka-console-consumer.sh --bootstrap-server 20.0.0.10:9092,20.0.0.20:9092,20.0.0.30:9092 --topic hyde1 8、不同主机订阅不同主题
1指定创建主题
kafka-topics.sh --create --zookeeper 20.0.0.20:2181 --replication-factor 1 --partitions 1 --topic hyde2 2发布消息
kafka-console-producer.sh --broker-list 20.0.0.20:9092 --topic hyde2 3消费消息
kafka-console-consumer.sh --bootstrap-server 20.0.0.20:9092 --topic hyde3 --from-beginning 9、修改分区数
kafka-topics.sh --zookeeper 20.0.0.20:2181 --alter --topic hyde2 --partitions 3
kafka-topics.sh --describe --zookeeper 20.0.0.20:2181 --topic hyde2 10、删除主题只是打上“删除”的标记并不是真正的删除还保存在元数据中
kafka-topics.sh --delete --zookeeper 20.0.0.20:2181 --topic hyde2 11、查看内部保存的元数据信息 总结
1、zookeeper主要是分布式、观察者模式统一各个服务器节点的数据
在kafka当中zookeeper主要是收集、保存kafka的元数据
2、kafka消息队列订阅发布模式速度快处理大数据 RABDIT MQ轻量级实现rabbit MQ消息队列
3、kafka的组件
1主题
2分区存储消息的位置
3偏移量
七配置kafka3.4.1还是依赖于zookeeper
1、部署zookeeper组件
2、安装kafka3.4.1 3、修改配置文件 4、添加环境变量 5、编辑启动脚本
chmod x /etc/init.d/kafka
chkconfig --add kafka
service kafka start 6、创建主题
kafka-topics.sh --create --bootstrap-server 20.0.0.51:9092,20.0.0.52:9092,20.0.0.53:9093 --replication-factor 2 --partitions 3 --topic hyde1 7、查看主题
1查看列表
kafka-topics.sh --list --bootstrap-server 20.0.0.51:9092,20.0.0.52:9092,20.0.0.53:9093 2查看主题详情
kafka-topics.sh --describe --bootstrap-server 20.0.0.51:9092,20.0.0.52:9092,20.0.0.53:9093 8、发布、消费消息
1发布消息
kafka-console-producer.sh --broker-list 20.0.0.51:9092,20.0.0.52:9092,20.0.0.53:9093 --topic hyde1