返回顶部
首页 > 资讯 > 精选 >怎样实现Pulsar与Kafka消费模型对比
  • 863
分享到

怎样实现Pulsar与Kafka消费模型对比

2023-06-19 13:06:44 863人浏览 安东尼
摘要

这期内容当中小编将会给大家带来有关怎样实现Pulsar与kafka消费模型对比,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。kafkakafka 属于 Stream 的消费模型,为了支持多 partiti

这期内容当中小编将会给大家带来有关怎样实现Pulsar与kafka消费模型对比,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

kafka

kafka 属于 Stream 的消费模型,为了支持多 partition 的消费关系,引入了 consumer group 的概念,同时支持在消费端动态的 reblance 操作,当多个 Consumer 订阅了同一个 Topic 时,会根据分区策略进行消费者订阅分区的重分配。只要 consumer-group 与 topic 之间的关系发生变更,就会动态触发 reblance 操作,诸如:

  • 增加或减少 topic 中 partition 的数目

  • consumer-group 中的 consumer 数减少

  • consumer-group 与 topic 之间的订阅关系发生变更

  • 等等

引入 reblance 的好处在于,当订阅关系发生变更时,用户无需重新启动系统,就可以实现订阅关系的变更,相当于 kafka 将这种分配的权利从服务端下放到客户端中的 consumer 来管理,这样用户就可以自定义自己的分配方案。

pulsar

类似 kafka 这样的 Stream MQ,更多时候适合做离线业务的处理与分析,很多线上业务会使用 Active MQ 这样 Queue 的 MQ。为了同时兼容这两种消费模型,pulsar 做了一层消费层的抽象,统一了 Queue 和 Stream 这两种消费模型。

其中,Exclusive 和 Failover 属于 Stream 的消费模型,Share 属于 Queue 的消费模型。在写此文章时,pulsar 最新版本为 2.3.1,Key_Shared 属于pulsar 新增加的一种订阅模型,在之后的文章中,我们会单独对 Key_shared 订阅模型做单独的分享,这里不在赘述。

对 Stream 支持的对比

由于 kafka 不支持 Queue 类型的消费模型,所以 Share 这种形式在这里不做对比。下面,和大家一起讨论以下在 Stream 下 pulsar 与 kafka 的消费模型。

如下图所示,左边为 pulsar 在 Failover 和 Exclusive 下的消费情况,右边为 kafka 的消费模型。

假设目前有一个 topic,topic name 为 topic1,有 5 个partition,分别为:topic1-p1,topic1-p2,topic1-p3,topic1-p4,topic1-p5,在 kafka 中,使用了 consumer-group 且该 group 下有三个 consumer,上文中提到,kafka 支持 reblance 机制,所以当 consumer-2 与 consumer-3 加入 consumer-group 的过程中,会动态分摊之前 consumer-1 的消费压力,表现为如上图右半部分所示,cousumer-1 消费 topic1-p1 和 ropic1-p2,consumer-2 消费 topic1-p3 和 topic1-p4,consumer-3 消费 topic1-p5 。所以当用户不断的往 consumer-group 中添加 consumer 时,利用 kafka 的 reblance 机制,是可以让用户动态指定具体哪一个 consumer 来消费 topic1 中的哪些 partition。

在 pulsar 中,你可以将 subscribe 理解为 kafka 中的 consumer-group,如果用户在启动 consumer 时,指定的 subscribe-name 是相同的,说明这两个 consumer 属于同一个订阅组,代码示例如下:


Consumer<byte[]> consumer1 = pulsarClient.newConsumer().topic("topic-1").subscriptionName("my-subscriber-name")                .subscriptionType(SubscriptionType.Failover)                .subscribe();
Consumer<byte[]> consumer2 = pulsarClient.newConsumer().topic("topic-2").subscriptionName("my-subscriber-name")                .subscriptionType(SubscriptionType.Failover)                .subscribe();

如上图示例所示,在同一个订阅组下,启动三个 consumer,在 pulsar 中,每一个 consumer 都会去订阅 topic1 中的 5 个 partition,所以每个 consumer 都会去启动 5 个 sub-consumer,在 failover 的订阅模型下,会使用 hashcode 的形式,将 5 个 partition 分配给三个 consumer 来消费,pulsar 将当前正在消费的 sub-consumer 看作是处于 leader 状态的 consumer,剩余未工作的 sub-consumer 作为从节点,当 leader 状态的 consumer 由于某些原因无法工作时,处于从状态的 sub-consumer 会去接替 leader 的 consumer,并继续工作。可以发现,kafka 加入 reblance 的机制,允许用户自己指定哪些 consumer 来消费 哪些 partition,在 pulsar 中,这个工作由 failover 的机制来完成,它通过 hash 的形式,将 consumer 分配到不同的 sub-consumer 中来执行。

现在,验证一下上述所描述的内容。

场景一

以 standalone 的形式启 pulsar

Docker run -it \  -p 6650:6650 \  -p 8080:8080 \  -v $PWD/pulsardata:/pulsar/data \  apachepulsar/pulsar:2.3.0 \  bin/pulsar standalone

创建一个 topic,partition 的数目为 4


$ ./bin/pulsar-admin topics mytopic1 create-partitioned-topic -p 4

以 failover 的订阅类型,启动 3 个 consumer,并指定他们为同一个订阅组,即-s sub-1

$ ./bin/pulsar-client consume mytopic1 -s sub-1 -n 0 -t Failover

启动 producer,发送 10 条数据到 mytopic1

$ ./bin/pulsar-client produce mytopic1 -n 10 -m "hello-pulsar"

可以看到,consumer1 接收到 2 条消息,consumer2 接收到 5 条消息,consumer3 接收到 3 条消息。效果和我们所预期的是一致的。

上述情况是因为在 producer 发送之前,就已经启动好三个 consumer 来消费消息,所以 pulsar 会以 hash 的形式将消息分发到三个 consumer 中来消费。

场景二

Exclusive 的订阅形式启动两个 consumer,效果如下:

./bin/pulsar-client consume mytopic1 -s sub-1 -n 0 -t Exclusive

当启动 consumer2 时,会报错 Exclusive consumer is already connected,这是因为,Failover 的订阅模式下,其它的 consumer 会以 “从” consumer 的形态存在,但是 Exclusive 只允许一个 consumer 订阅一个 topic。

上述就是小编为大家分享的怎样实现Pulsar与Kafka消费模型对比了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: 怎样实现Pulsar与Kafka消费模型对比

本文链接: https://lsjlt.com/news/296186.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎样实现Pulsar与Kafka消费模型对比
    这期内容当中小编将会给大家带来有关怎样实现Pulsar与Kafka消费模型对比,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。kafkakafka 属于 Stream 的消费模型,为了支持多 partiti...
    99+
    2023-06-19
  • Queue 实现生产者消费者模型(实例讲解)
    Python中,队列是线程间最常用的交换数据的形式。 Python Queue模块有三种队列及构造函数: 1、Python Queue模块的FIFO队列先进先出。 class Queue.Queue(max...
    99+
    2022-06-04
    生产者 实例 模型
  • python怎么实现消费kafka数据并写入数据库
    要消费Kafka数据并将其写入数据库,可以按照以下步骤进行操作:1. 首先,确保已经安装了kafka-python库,可以使用以下命...
    99+
    2023-09-14
    python kafka 数据库
  • spring kafka怎么实现消费者动态订阅新增的topic
    这篇文章主要介绍了spring kafka怎么实现消费者动态订阅新增的topic的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇spring kafka怎么实现消费者动态订阅新增的topic文章都会有所收获,下面...
    99+
    2023-07-04
  • 怎么在Python中利用 Asyncio模块实现一个生产消费者模型
    本文章向大家介绍怎么在Python中利用 Asyncio模块实现一个生产消费者模型的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Python主要用来做什么Python主要应用于:1、Web开发;2、数...
    99+
    2023-06-06
  • C#使用泛型队列Queue实现生产消费模式
    如果把生产消费想像成自动流水生产线的话,生产就是流水线的物料,消费就是某种设备对物料进行加工的行为,流水线就是队列。 现在,要写一个体现生产消费模式的泛型帮助类,比如叫Produce...
    99+
    2022-11-13
    C# 泛型队列 Queue 实现生产消费模式
  • 怎样用JavaScript实现原型模式
    概述 原型模式是指原型实例指向创建对象的种类,并通过拷贝这些原型创建新的对象,是一种用来创建对象的模式,也就是创建一个对象作为另一个对象的prototype属性; prototype...
    99+
    2024-04-02
  • python多进程中的生产者和消费者模型怎么实现
    这篇文章主要介绍了python多进程中的生产者和消费者模型怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python多进程中的生产者和消费者模型怎么实现文章都会有所收获,下面我们一起来看看吧。Pytho...
    99+
    2023-07-05
  • golang生产者消费者模式怎么实现
    在Go语言中,可以使用goroutine和channel来实现生产者消费者模式。 首先,我们定义一个包含生产者和消费者的函数: fu...
    99+
    2023-10-20
    golang
  • Go语言实现一个简单生产者消费者模型
    目录一、生产者消费者模型二、Go语言实现1、无缓冲channel2、有缓冲channel三、实际应用简介:介绍生产者消费者模型,及go简单实现的demo。 一、生产者消费者模型...
    99+
    2022-06-07
    GO 模型 go语言
  • Go语言如何实现一个简单生产者消费者模型
    这篇文章给大家分享的是有关Go语言如何实现一个简单生产者消费者模型的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、生产者消费者模型生产者消费者模型:某个模块(函数等〉负责产生数据,这些数据由另一个模块来负责处理...
    99+
    2023-06-22
  • Golang中使用RabbitMQ实现多种消息模式的比较与选择
    在Golang中使用RabbitMQ可以实现多种消息模式,例如发布/订阅模式、工作队列模式、路由模式和主题模式。这些模式都有不同的特...
    99+
    2023-10-08
    Golang
  • 开源消息中间件Kafka在华泰证券的探索与实践是怎样的
    开源消息中间件Kafka在华泰证券的探索与实践是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Kafka 作为开源消息中间件的重要分支,在券商领域会有怎样...
    99+
    2023-06-19
  • LINUX C系统编程与PYTHON中的时间模块对比是怎样的
    LINUX C系统编程与PYTHON中的时间模块对比是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。今天看python时间模块time的时候发现和LINUX系统编程中...
    99+
    2023-06-04
  • Docker怎么启动RabbitMQ实现生产者与消费者
    这篇文章主要讲解了“Docker怎么启动RabbitMQ实现生产者与消费者”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Docker怎么启动RabbitMQ实现生产者与消费者”吧!一、Doc...
    99+
    2023-07-05
  • 队列的生产者与消费者模式在PHP与MySQL中的实现方法
    随着互联网业务的快速发展,系统中处理大量任务的需求变得越来越迫切。队列是一种常见的解决方案,可以高效地处理任务。队列的生产者-消费者模式(Producer-Consumer Pattern)在PHP和MySQL中的实现方法是一种常见的解决方...
    99+
    2023-10-21
    MySQL 消费者 PHP 队列 生产者
  • Java多线程中消费者生产者模式怎么实现
    这篇文章主要讲解了“Java多线程中消费者生产者模式怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java多线程中消费者生产者模式怎么实现”吧!  //主类&nb...
    99+
    2023-06-17
  • Java多线程Queue、BlockingQueue和使用BlockingQueue实现生产消费者模型方法解析
    Queue是什么队列,是一种数据结构。除了优先级队列和LIFO队列外,队列都是以FIFO(先进先出)的方式对各个元素进行排序的。无论使用哪种排序方式,队列的头都是调用remove()或poll()移除元素的。在FIFO队列中,所有新元素都插...
    99+
    2023-05-30
    java 多线程 生产消费者
  • Python怎样实现LeNet网络模型的训练及预测
    本篇文章给大家分享的是有关Python怎样实现LeNet网络模型的训练及预测,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.LeNet模型训练脚本整体的训练代码如下,下面我会...
    99+
    2023-06-21
  • Python中怎么利用多线程实现生产者消费者模式
    Python中怎么利用多线程实现生产者消费者模式,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是生产者消费者模式在软件开发的过程中,经常碰到这样的场景:某些模块负责生产数据...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作