您的当前位置: 重症肌无力 > 疾病常识

消息中间件架构面面观

Kafka

首先还是来看Kafka的系统架构(做消息中间件逃不开要去了解Kafka)。

Kafkacosystm包含以下几块内容:

Producr

Consumr

Kafkaclustr

ZooKpr

其中ZooKpr承当了NamSrvr的角色,同时用于保存系统的元数据,提供选主、协调等功能。

Brokr是真正的服务端,用于存储消息。

可用性

首先看外部依赖的可用性。如果你的系统“强依赖”了外部的其他服务,那么你的系统的可用性必然和外部服务的可用性相关。(强依赖表示不可脱离依赖的服务保持正常运行)

从上面的架构可以看出Kafka只是依赖了ZooKpr,而ZooKpr本身是高可用的(2N+1个节点的ZK集群可以容忍N个节点故障),所以不会对整个集群的可用性造成影响。

接着看Kafka自身的可用性。谈可用性必然就会涉及到备份问题,没有备份就意味着存在单点问题,也就没有高可用可言了。所以我们具体来看一下Kafka的备份策略。

KafkaRplication的数据流如上图所示,从图中可以得到的一些信息:

1.分区是有备份的,如topic1-part1上图中有3个

2.分区的备份分布在不同的Brokr上,上图中topic1-part1分布在brokr1、brokr2、brokr3上,其中brokr1上的为Ladr

3.分区的Ladr是随机分布的,上图中topic1-part1的Ladr在brokr1,topic2-part1的Ladr在Brokr上,topic3-part1的Ladr的Brokr4上

4.消息写入到Ladr分区,之后通过Ladr分区复制到Followr分区

Kafak这样的Rplication策略,保证了任何一个Brokr出现故障时,系统依旧是可用的。如brokr1出现故障,此时会重新选举topic1-part1的Ladr,之后可能是brokr2或者brokr3上的topic1-part1成为Ladr然后负责消息的写入。

所以系统的可用性取决于分区备份的数量,这个备份数据是可配置的。

Kafka自身通过Rplication实现了高可用,结合依赖的ZooKpr也是高可用,所以整个系统的可用性得到了较好的保障。

可靠性

在消息中间件中,可靠性主要就是写入的消息一定会被消费到,条消息不会丢失。

在分布式环境中消息不丢失有两点:

1.消息在成功写入一个节点后,消息会做持久化

2.消息会被备份到其他物理节点

只要做到上面两点就可以保证除所有节点都发生永久性故障的情况下数据不会丢失。

KafkaBrokr上写入的消息都会刷盘(可以是异步刷盘也可以是同步刷盘),也会备份到其他物理节点,所以满足以上两点。

异步刷盘结合多节点的备份策略也能提供比较好的可靠性,除非是机房掉电之类的情况导致所有节点未刷盘的数据丢失。

当然,消息丢失不一定指消息真的从磁盘上被销毁或者没被存储下来,如果消息被存储下来了,但是没办法被消费,对客户端来说也是消息丢失。比如Consumr收到消息后进行ACK之后再消费,如果在消费之前Crash了,那么下一次也不会拿到这条消息,也可以理解成消息丢了,但是这这篇文章中我们不讨论这种情况。

评价

优点

1.部分功能托管给了ZK,自身只需要







































中医治疗白癜风的方法
治白癫风



转载请注明:http://www.fdhhc.com/jbcs/10169.html