pulsar

key shared 消费者增加减少需要解决的问题?

不羁岁月 提交于 2020-08-11 02:32:09
key shared 消费者增加减少需要解决的问题? 1.解决顺序问题 让新加进来的consumer 等前面的消息都签收掉在分发给他消息就可以。 缺点:增加所有消费者的消费延迟时间!(所有的消费者暂停,直到新的消费者加入之前,读取的所有消息被确认为止) 1.1缓冲区优化: 加了一个缓冲区,把消息发到缓冲区,老的消费者根据hash算法消费属于自己的消息。发给新消费者的消息暂存在缓冲区。新的消费者属于暂停状态。老的消费者可以继续消费新的消息。 1.2新增缓存区缺点:当频繁变动消费者数量时,需要复杂的逻辑处理,来保证消息的顺序性。缓存区满后,所有消费者进入暂停状态 2解决hash分配均匀问题 2.1一致性hash槽,类似redis 集群hash槽 2.2hash range 2 分法(扩容找到最大的平均分配,缩容找到最小的) https://github.com/apache/pulsar/pull/6977 https://github.com/apache/pulsar/pull/7106 https://github.com/apache/pulsar/pull/6791 topic 游标 0-100 1. 游标0-5 游标6-10 | (游标为10的时候c3加入) c1 c2 c3加入 2. 缓存区(c1,c2继续消费属于自己的消息 | c3等游标10确认后推给c3消息) 0-5

选择 Pulsar 而不是 Kafka 的 7 大理由

流过昼夜 提交于 2020-08-10 00:06:12
凡泰极客导读: 金融界IT同侪们对Kafka应该都很熟悉了,但是也许没有怎么听过Pulsar —— 一个Apache基金会管理下的顶级开源项目。个人一直非常关注这个有趣的技术,首先是出于一定的“感情” , 它的核心技术之一BookKeeper自从2011年即以ZooKeeper的子项目存在、由Yahoo研发、并有雅虎北京研究院团队良多贡献;Pulsar的核心技术大拿也是雅虎北研的队友,我们算知彼知己吧。 Pulsar一些对金融业务场景非常有价值的地方,个人认为是(1)实时、可靠、持久化的数据跨域复制 – 跨网段、跨机房的实时同步一直是证券业的刚需;(2)Broker无状态 – 弹性伸缩水平扩容这些对于交易应用最难实现的能力,也许有一个更可靠的机制去实现。Kafka诞生在“云原生”概念还没有形成的年代,Pulsar在这方面有后发优势。对于容器化及容器编排技术的友好,也是吸引我们的一个地方。 在凡泰极客,我们的中间件采用NATS和Kafka,但是我们在积极寻找适合Pulsar的场景,相信在证券业中我们会找到它的有趣应用,推荐同业一起研究。 —— 梁启鸿,凡泰极客 Co-Founder 下面列出了选择 PULSAR 而不是 KAFKA 的 7 大理由。 流式处理和队列的合体 Pulsar 就像一个合二为一的产品,不仅可以像 Kafka 那样处理高速率的实时场景,还支持标准的消息队列模式

pulsar的消息保留策略(保留策略,积压,ttl时间)

不打扰是莪最后的温柔 提交于 2020-08-06 23:51:43
默认情况: 立即删除每个订阅上已确认的所有消息,并且 持久性地将所有未确认的消息存储在待办事项中。 通过指定生存时间(TTL),可以在指定的时间范围内未确认的消息自动标记为已消耗。 保留策略 持久存储已经消耗并确认的消息,消息不论消费和未消费,都至少保存X小时。 设置已确认消费消息最大保存时间 pulsar-admin namespaces set-retention tenant/namespace –size -1 –time 168h 获取 pulsar-admin namespaces get-retention tenant/namespace 参考网站 http://pulsar.apache.org/docs/en/cookbooks-retention-expiry/#get-retention-policy messageTTL时间 默认情况下,Pulsar会永久存储所有未确认的消息。这是对应于未消费消息来说。 若是已消费消息,则会删除。此时回滚会发现已经没了,所以最好设置保留策略。根据实际需求来配置 此时设置的是未确认消息最大保存时间 pulsar-admin namespaces set-message-ttl tenant/namespace –messageTTL 120 # TTL of 2 minutes 未消费消息保留策略 pulsar-admin

pulsar的消息保留策略(保留策略,积压,ttl时间)

孤街浪徒 提交于 2020-08-06 23:03:28
默认情况: 立即删除每个订阅上已确认的所有消息,并且 持久性地将所有未确认的消息存储在待办事项中。 通过指定生存时间(TTL),可以在指定的时间范围内未确认的消息自动标记为已消耗。 保留策略 持久存储已经消耗并确认的消息,消息不论消费和未消费,都至少保存X小时。 设置已确认消费消息最大保存时间 pulsar-admin namespaces set-retention tenant/namespace –size -1 –time 168h 获取 pulsar-admin namespaces get-retention tenant/namespace 参考网站 http://pulsar.apache.org/docs/en/cookbooks-retention-expiry/#get-retention-policy messageTTL时间 默认情况下,Pulsar会永久存储所有未确认的消息。这是对应于未消费消息来说。 若是已消费消息,则会删除。此时回滚会发现已经没了,所以最好设置保留策略。根据实际需求来配置 此时设置的是未确认消息最大保存时间 pulsar-admin namespaces set-message-ttl tenant/namespace –messageTTL 120 # TTL of 2 minutes 未消费消息保留策略 pulsar-admin

pulsar 复制的订阅 测试

心已入冬 提交于 2020-08-06 04:59:56
官方pip https://github.com/apache/pulsar/wiki/PIP-33%3A-Replicated-subscriptions 测试场景: 集群:sh集群,bj集群 版本:2.5.2 sh集群生产100条消息,sh集群没秒钟消费1条消息,然后观察 Mark Delete Position ,read position的变化。 结论:大约再35条消息时候bj集群的 Mark Delete Position ,read position会更新,推测是消息消费35样子会触发一次同步订阅 疑问:官方说的是1秒钟同步一次,但是测试不是这样的。 疑问2:geo就是一个生产者发往远端集群,当没生产者的时候,为什么这里还是一直再增加? replicated subscription 的 pip 里面有说明,他是依赖消息传递来同步 subscription state 的 pip实现描述: 拟议的解决方案 地理复制的Pulsar主题可以看作是部分有序日志的集合。 由于生产者可以在每个区域上发布消息,因此每个区域最终可能会有一系列不同于其他区域的消息,尽管来自一个特定区域的消息将始终按顺序存储。 主要思想是创建一致的分布式快照,以建立来自不同群集的消息ID之间的关联。 消息ID的快照将以以下方式构造: 对于给定的消息 M1-a (写入或复制到region a )

Pulsar Consumer实现介绍

情到浓时终转凉″ 提交于 2020-07-29 07:27:51
Pulsar-Consumer “Pulsar is a distributed pub-sub messaging platform with a very flexible messaging model and an intuitive client API.” Pulsar是pub-sub模式的分布式消息平台,拥有灵活的消息模型和直观的客户端API。 Pulsar由雅虎开发并开源的下一代消息系统,目前是Apache软件基金会的孵化器项目。 本片文章简单介绍Pulsar的Consumer,包含以下内容: Consumer的体系 消费逻辑的实现 1. Consumer体系 A consumer is a process that attaches to a topic via a subscription and then receives messages. Consumer通过订阅关系绑定到Topic(和Producer类似,都是绑定到一个Topic上),并接收消息。 Consumer支持: 同步接收消息:阻塞用户线程等待消息 异步接收消息:异步等待消息(通过Future返回消息) 通过MessageListener返回消息:接收消息后回调用户的MessageListener Consumer提供了三类获取消息的方式

[Apache Pulsar] 企业级分布式消息系统-Pulsar快速上手

半世苍凉 提交于 2020-07-28 20:21:38
Pulsar快速上手 前言 如果你还不了解Pulsar消息系统,可以先看上一篇文章 企业级分布式消息系统-Pulsar入门基础 Pulsar客户端支持多个语言,包括Java,Go,Pytho和C++,本篇文章只讲述Java客户端。 Pulsar Java客户端既可用于创建消息的producers、consumers和readers ,也可用于执行管理任务。Java 客户端的当前版本为 2.4.0。 1. 安装 最新版本的Pulsar Java 客户端库可通过 Maven中央仓库 使用。 要使用最新版本, 请将 pulsar-client 库添加到构建配置中。 1.1 Maven 如果你使用maven,添加以下内容到你的 pom.xml 中: <!-- 在你的 <properties> 部分--> <pulsar.version>2.4.0</pulsar.version> <!-- 在你的 <dependencies> 部分--> <dependency> <groupId>org.apache.pulsar</groupId> <artifactId>pulsar-client</artifactId> <version>${pulsar.version}</version> </dependency> 1.2 Gradle 如果你使用Gradle,添加以下内容到你的 build

Apache Common Pool Introduction

人走茶凉 提交于 2020-05-01 14:20:47
先说下主要的类和接口 ObjectPool 接口是“池”定义,GenericObjectPool 是它的实现。 PooledObject 接口是“池对象”定义,DefaultPooledObject 是它的实现。 PooledObjectFactory 接口是“产生池对象的工厂”定义,BasePooledObjectFactory是它的实现。 下面我们先用以上几个类和接口搭建一个租车实例。 package com.pulsar.pool; import org.apache.commons.pool2.BasePooledObjectFactory; import org.apache.commons.pool2.PooledObject; import org.apache.commons.pool2.impl.DefaultPooledObject; import org.apache.commons.pool2.impl.GenericObjectPool; public class CPool { public static void main(String[] args){ CarFactory poolFactory = new CarFactory(); GenericObjectPool<Car> pool = new GenericObjectPool<>