Zookeeper

目录

Zookeeper

Zookeeper选举机制(基于paxos算法实现的)

Kafka架构组件

kafka管理操作

[kafka通过 ack 应答机制来保证数据的可靠性](#kafka通过 ack 应答机制来保证数据的可靠性)


Zookeeper

分布式系统管理框架,主要用来解决分布式应用集群中应用系统的数据一致性问题 相当于各种分布式应用的 注册中心+文件系统+通知机制

本质:用于注册各种分布式应用,存储和管理这些分布式应用的元数据,如果应用或服务本身状态发送变化就会通知客户端

Zookeeper选举机制(基于paxos算法实现的)

第一次leader选举:比较服务器节点的myid,谁的myid最大就获取其它节点的选票,当选票超过服务器节点数量的半数则当选leader,其它节点为follower,即使以后再有其它myid更大的节点加入集群也不会影响之前的选举结果。

非第一次选举:如果是非leader节点故障,替换新的节点继续作follower,与现存的leader节点建立连接并同步数据

如果是leader节点故障,则需要重新选举新的leader,先比较每个存活节点的epoch(参与选举的次数),如由epoch最大的节点则直接当选leader

若epoch有相同的节点,再比较zxid(写操作的事务id),如由zxid最大的节点则直接当选leader

若zxid也有相同的节点,继续比较sid(等同于myid),由sid最大的节点当选leader

中间件 实现应用解耦、异步处理

Web应用型(代理服务器):Nginx Haproxy Tomcat PHP

消息队列型(MQ):Redis Kafka RabbitMQ RocketMQ ActiveMQ

消息队列的好处:应用解耦、异步处理、数据缓冲、流量削峰、可恢复 等

消息队列的模式:

点对点模式:一对一,一个消息只能有一个消费者能够消费,消息者消费完消息后会清除消息

发布/订阅模式(观察者模式):一对多,数据生产后会推送给所有消费者,消费者消费完消息后不会清除消息

Kafka 是一个分布式的基于发布/订阅模式的消息队列。主要应用于大数据实时处理领域和日志收集。

Kafka架构组件

Broker kafka服务器节点

Producer 生产者,发布消息到topic

Consumer 消费者

Consumer Group 消息者组,是消息的实际订阅者,一个消费者组包含一个或多个消费者,且组内成员不能重复消费同一个Partition数据

Producer -> Topic消息队列 -> 一个或多个partition分区 -> 一个或多个replica副本(leader负责数据读写,follower只负责同步复制leader的数据)

Consumer -> offset偏移量(用来记录消费者上一次消费到的位置)

Zookeeper 存储和管理kafka集群的元数据,生产者和消费者的动作都需要zk的管理和支持。

比如生产者推送数据到kafka需要先通过zk寻找到kafka集群节点的位置,消费者可以从zk获取offset记录的上一次消费的位置再继续往后消费。

kafka管理操作

kafka-topics.sh --zookeeper IP1:2181,IP2:2181,IP3:2181 --create --topic 队列名 --partitions 分区数 --replication-factor 副本数 #创建topic

kafka-topics.sh --zookeeper IP1:2181,IP2:2181,IP3:2181 --list #查看topic列表

kafka-topics.sh --zookeeper IP1:2181,IP2:2181,IP3:2181 --discribe --topic 队列名 #查看topic详细信息

kafka-topics.sh --zookeeper IP1:2181,IP2:2181,IP3:2181 --alter --topic 队列名 --partitions 分区数(只能增不能减) #修改topic分区配置

kafka-topics.sh --zookeeper IP1:2181,IP2:2181,IP3:2181 --delete --topic 队列名 #删除topic

kafka-console-producer.sh --broker-list IP1:9092,IP2:9092,IP3:9092 --topic 队列名 #向topic推送消息

kafka-console-consumer.sh --bootstrap-server IP1:9092,IP2:9092,IP3:9092 --topic 队列名 [--from-beginning] #从topic拉取消息

kafka通过 ack 应答机制来保证数据的可靠性

在 producer.properties 配置文件中设置 request.required.ack 参数

acks 参数设置 0,代表生产者不等kafka确认就会发送下一条消息。此机制性能最高,可靠性最低,当leader的broker故障可能会丢失数据

1,代表生产者会等leader接收到数据并确认后才会发送下一条数据、此机制性能其次,可靠性一般,当follower同步完成前leader故障可能会导致数据丢失

-1|all,代表生产者需要等所有的follower都同步完成并确认后才会发送下一条数据。此机制性能最低,可靠性最高

相关推荐
KIDAKN18 小时前
RabbitMQ 初步认识
分布式·rabbitmq
pan30350747919 小时前
Kafka 和 RabbitMQ的选择
分布式·kafka·rabbitmq
hzulwy21 小时前
Kafka基础理论
分布式·kafka
明达智控技术1 天前
MR30分布式IO在全自动中药煎药机中的应用
分布式·物联网·自动化
jakeswang1 天前
细说分布式ID
分布式
LQ深蹲不写BUG1 天前
微服务的保护方式以及Sentinel详解
微服务·云原生·架构
失散131 天前
分布式专题——1.2 Redis7核心数据结构
java·数据结构·redis·分布式·架构
王中阳Go1 天前
头一次见问这么多kafka的问题
分布式·kafka
Serverless社区1 天前
重塑云上 AI 应用“运行时”,函数计算进化之路
阿里云·云原生·serverless
boonya1 天前
Kafka核心原理与常见面试问题解析
分布式·面试·kafka