关于后端:都-2023-年了你还在用-Kafka快试试这个全新平台吧

最近这个 Apache Pulsar 消息中间件十分的火,号称云原生时代的下一代音讯中件,明天,就一起来看看它到底有多牛逼?

Apache Pulsar简介

Apache Pulsar是一个企业级的分布式音讯零碎,最后由Yahoo开发并在2016年开源,目前正在Apache基金会下孵化。Plusar曾经在Yahoo的生产环境应用了三年多,次要服务于Mail、Finance、Sports、 Flickr、 the Gemini Ads platform、 Sherpa以及Yahoo的KV存储。 Pulsar之所以可能称为下一代音讯队列,次要是因为以下个性:

  1. 线性扩大。可能丝滑的扩容到成千盈百个节点(Kafka扩容须要占用很多系统资源在节点间拷贝数据,而Plusar齐全不必)
  2. 高吞吐。曾经在Yahoo的生产环境中禁受了考验,每秒数百万音讯
  3. 低提早。在大规模的音讯量下仍然可能放弃低提早(< 5ms)
  4. 长久化机制。Plusar的长久化机制构建在Apache BookKeeper之上,提供了写与读之前的IO隔离
  5. 基于地理位置的复制。Plusar将多地区/可用区的复制作为首要个性反对。用户只需配置好可用区,音讯就会被源源不断的复制到其余可用区。当某一个可用区挂掉或者产生网络分区,plusar会在之后一直的重试。
  6. 部署形式的多样化。既能够运行在裸机,也反对目前例如Docker、K8S的一些容器化计划以及不同的云厂商,同时在本地开发时也只须要一行命令即可启动整个环境。
  7. Topic反对多种生产模式:exclusive、shared、failover

架构

从最上层来看,一个Plusar单元由若干个集群组成,单元内的集群能够相互之前复制数据, plusar中通常有以下几种组件:

  1. Broker:负责解决Producer发来的音讯并分发给消费者。通过一个全局的ZK集群来解决多种合作式工作,例如说基于地理位置的复制。并将音讯存储到BookKeeper中,同时单个集群内也须要有一套ZK集群,来存储一些元数据。
  2. BookKeeper集群: 外部蕴含多个bookies,用于长久化音讯。
  3. ZooKeeper集群

Broker

Pulsar 的 Server 端,用来解决 Producer 和 Consumer 的数据收发逻辑. 每个 Broker治理 topic 中的一些分区, 生产者和消费者连贯到主题分区的所有者 Broker 发送音讯或生产音讯.plusar中的broker是一个无状态的节点,次要负责三件事件:

  1. 裸露REST接口用于执行管理员的命令以及topic所有者的查问等
  2. 一个用于节点间通信的异步的TCP服务器,协定目前采纳的是Google之前开源的Protocol Buffer
  3. 为了反对地区复制,broker会将本人 集群所在的音讯公布到其余可用区。

BookKeeper

BookKeeper是一个可横向扩大的、谬误容忍的、低提早的分布式存储服务,BookKeeper中最根本的单位是记录,实际上就一个字节数组,而记录的数组称之为ledger,BK会将记录复制到多个bookies,存储ledger的节点叫做bookies,从而取得更高的可用性和谬误容忍性。

Pulsar 中把每一个音讯认为是存储在 Apache BookKeeper 中的分布式日志, 每个分布式日志又被分为多个 Segment 分段, 每个 Segment
分段在 Apache BookKeeper 中叫做一个 Ledger,并扩散储在 BookKeeper 群集中的多个节点中.通过 Segment 分段的形式,主题分区中的音讯能够平衡地散布在群集中的所有Bookie 中.并且所有的正本是对等的,客户端能够从任何一个 Bookie 的正本中读取音讯. 数
据写入 Bookie 的一个根本过程:

咱们晓得Kafka在0.8版本之前是将生产进度存储到ZK中的,然而ZK实质上基于单个日志的核心服务,简略来讲,ZK的性能不会随着你减少更多的节点而线性减少,会只会相同缩小,因为更多的节点意味着须要将日志同步到更多的节点,性能也会随之降落,因而QPS也会受单机性能影响,因而0.8版本之后就将生产进度存储到了Kafka的Topic中,而RocketMQ最后的版本也相似,有几种不同的实现例如ZK、数据库等,目前版本采纳的是存储到本机文件系统中,而Plusar采纳了和Kafka相似的思维,Plusar将生产进度也存储到了BK的ledger中。

Topic

公布订阅零碎中最外围的概念是topic,简略来说,topic能够了解为一个管道,producer能够往这个管道丢音讯,consumer能够从这个管道的另一端读取音讯,然而这里能够有多个consumer同时从这个管道读取音讯。

每个topic能够划分为多个分区,同一个topic下的不同分区所蕴含的音讯都是不同的。每个音讯在被增加到一个分区后都会调配一个惟一的offset,在同一个分区内音讯是有序的,因而客户端能够依据比如说用户ID进行一个哈希取模从而使得整个用户的音讯都发往整个分区,从而肯定水平上防止race condition的问题。 通过分区,将大量的音讯扩散到不同的节点解决从而取得高吞吐。默认状况下,plusar的topic都是非分区的,然而反对通过cli或者接口创立肯定分区数目的topic。

Pulsar 是反对多租户(tenant)的,租户上面又分了命名空间(namespace). 所以 topic 的创立格局是/tenant/namespance/topic. 为了兼容kafka等消息中间件. pulsar预置了默认的租户和命名空间: pulibc/default. 举个例子,假如部署了一个 Pulsar 集群来反对多个应用程序,那么每个 tenant 都能够代表一个团队,一个外围的性能,或者一个产品线;一个 tenant 上面能够蕴含多个 namespace,例如,每个应用程序为一个 namespace; 一个 namespace 能够蕴含多个 Topic,如下图:

Producer

生产者, 负责将音讯发送给 Broker 节点, 发送音讯的过程如下:

  1. 通过负载平衡策略,动静的给 producer 调配一个适合的 broker 节点, 每个 broker 节点保护这 topic 的一些分区
  2. broker 将音讯并发的发送给 N 个 bookie,这个 N 是能够配置的。broker 持有 BookKeeper的客户端 writer,writer 收到写申请后,会并发的写入 N 个 bookie。
  3. bookie 写完音讯后会给 broker 一个回复,broker 收到指定数量的确认音讯后就会认为写 BookKeeper 胜利。这个数量是可配置的, 越大写 BookKeeper 提早越大,数据一致性越高。

Subscription

订阅, 决定了音讯具体是如何被散发到消费者的,Plusar反对几种不同的生产模式: exclusive、shared、failover。图示如下:

  1. Shared(共享订阅模式): 所应用共享订阅,在同一个订阅背地能够有任意多的消费者。订阅中的所有音讯以循环散发模式被动投递给订阅背地的多个消费者,并且一个音讯仅传递给一个消费者。当消费者断开连接时,所有传递给它然而未被确认(ack)的音讯将被重新分配和组织,以便发送给该订阅上残余的残余消费者。在这种模式下如果想进步生产的速度,用户不须要减少分区数量,只须要在同一个订阅中增加更多的消费者。下图是共享订阅的示例。 消费者 C-1,C-2 和 C-3 都在同一主题上生产音讯。 每个消费者接管大概所有音讯的 1/3。
  2. Key_shared(基于 Key 的共享模式): 联合了 FailOver 和 Shared 的劣势, 数据按肯定的key 策略轮询的形式散发到每一个消费者.这样既保证了有序性, 又能够很轻易的通过扩容consumer 来减少生产速率
  3. Failover(故障切换模式): 每应用故障切换订阅,多个消费者(Consumer)能够附加到同一订阅。 然而,一个订阅中的所有消费者,只会有一个消费者被选为该订阅的主消费者, 其余消费者将被指定为故障转移消费者。当主消费者断开连接时,分区将被重新分配给其中一个故障转移消费者,而新调配的消费者将成为新的主消费者。 产生这种状况时,所有未确认(ack)的音讯都将传递给新的主消费者,相似于 kafka 的生产模式, 保障了生产的有序性.
    下图是故障切换订阅的示例。 消费者 B-0 和 B-1 通过订阅 B 订阅生产音讯。B-0是主消费者并接管所有音讯。 B-1 是故障转移消费者,如果消费者 B-0 呈现故障,它将接管生产.
  4. Exclusive(独占订阅模式):顾名思义,独占订阅中,在任何工夫,一个消费者组(订阅)中有且只有一个消费者来生产 Topic 中的音讯。下图是独占订阅的示例。在这个示例中有一个有订阅 A 的沉闷消费者 A-0,音讯 m0 到 m4 按程序传送并由 A-0 生产。如果另一个消费者 A-1 想要附加到订阅 A,则是不被容许的.

总结

Pulsar作为下一代分布式音讯队列,领有十分多吸引人的个性,也补救了一些其余竞品的短板,例如地区复制、多租户、扩展性、读写隔离等等.

本文由mdnice多平台公布

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据