消息队列、Dubbo+ZooKeeper

本文深入探讨了消息队列Kafka的存储机制、可靠性保证以及消息模式,解释了Dubbo的容错机制、注册中心挂机后的通信能力以及线程池设计,还介绍了ZooKeeper的CAP定理、BASE理论及其选举算法FastLeaderElection。通过对这三个关键组件的分析,揭示了分布式系统的核心运作机制。
摘要由CSDN通过智能技术生成

目录

一、消息队列

为什么需要消息队列

Kafka的文件存储机制

Kafka 如何保证可靠性

Kafka消息是采用Pull模式,还是Push模式

Kafka是如何实现高吞吐率的

Kafka判断一个节点还活着的两个条件

二、Dubbo

Dubbo的容错机制

Dubbo注册中心挂了还可以继续通信么

Dubbo提供的线程池

Dubbo框架设计结构

三、ZooKeeper

CAP定理

BASE理论

ZooKeeper特点

ZAB协议

选举算法和流程:FastLeaderElection(默认提供的选举算法)

zk中的监控原理


一、消息队列

为什么需要消息队列

解耦,异步处理,削峰/限流

Kafka的文件存储机制

Kafka中消息是以topic进行分类的,生产者通过topicKafka broker发送消息,消费者通过topic读取数据。然而topic在物理层面又能以partition为分组,一个topic可以分成若干个partitionpartition还可以细分为segment,一个partition物理上由多个segment组成,segment文件由两部分组成,分别为“.index”文件和“.log”文件,分别表示为segment索引文件和数据文件。这两个文件的命令规则为:partition全局的第一个segment0开始,后续每个segment文件名为上一个segment文件最后一条消息的offset值。

Kafka 如何保证可靠性

如果我们要往 Kafka 对应的主题发送消息,我们需要通过 Producer 完成。前面我们讲过 Kafka 主题对应了多个分区,每个分区下面又对应了多个副本;为了让用户设置数据可靠性, Kafka Producer 里面提供了消息确认机制。也就是说我们可以通过配置来决定消息发送到对应分区的几个副本才算消息发送成功。可以在定义 Producer 时通过 acks 参数指定。这个参数支持以下三种值:

1)acks = 0:意味着如果生产者能够通过网络把消息发送出去,那么就认为消息已成功写入 Kafka 。在这种情况下还是有可能发生错误,比如发送的对象无能被序列化或者网卡发生故障,但如果是分区离线或整个集群长时间不可用,那就不会收到任何错误。在 acks=0 模式下的运行速度是非常快的(这就是为什么很多基准测试都是基于这个模式),你可以得到惊人的吞吐量和带宽利用率,不过如果选择了这种模式, 一定会丢失一些消息。

2)acks = 1:意味若 Leader 在收到消息并把它写入到分区数据文件(不一定同步到磁盘上)时会返回确认或错误响应。在这个模式下,如果发生正常的 Leader 选举,生产者会在选举时收到一个 LeaderNotAvailableException 异常,如果生产者能恰当地处理这个错误,它会重试发送悄息,最终消息会安全到达新的 Leader 那里。不过在这个模式下仍然有可能丢失数据,比如消息已经成功写入 Leader,但在消息被复制到 follower 副本之前 Leader发生崩溃。

3)acks = all(这个和 request.required.acks = -1 含义一样):意味着 Leader 在返回确认或错误响应之前,会等待所有同步本都收到悄息。如果和min.insync.replicas 参数结合起来,就可以决定在返回确认前至少有多少个副本能够收到悄息,生产者会一直重试直到消息被成功提交。不过这也是最慢的做法,因为生产者在继续发送其他消息之前需要等待所有副本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值