怎么用 Pulsar ?举个栗子来看看
🎙️阅读本文需 3 分钟
>>> 简介 <<<
作为 Apache Spark 和 Apache Kafka 的忠实用户,我认为自己对流处理非常了解。这种认为自己足够了解某一技术的想法对于开发人员而言是很危险的,因为它会阻碍你成长,阻碍你真正掌控知识并激发自身潜力。
当我有这种感觉时,我发现多与别人沟通、阅读博客文章、夯实并扩展我的个人技能非常重要。我决定研究一种不同的流技术,可以在其中进行简单快速的开发。因此,我选择了 Apache Pulsar。
>>> 高级技术讨论 <<<
Apache Pulsar 是基于发布-订阅模式构建的,与其他流式服务(例如,Kafka、Storm)非常相似。但是,与大数据生态系统中现有的一些流技术相比,Apache Pulsar 具有某些独特的优势,其中之一是它的服务层和存储层是分离的。下文我将简要介绍 Apache Pulsar。
图来自 Apache Pulsar Documentation
为什么存储层和服务层分离很重要呢?因为在这种情况下,我们可以按需扩展。如果需要使用 CDC(Change Data Capture)抓取数据库的历史变更数据,而需要更多存储空间怎么办?可以试试缩减用于为流处理提供服务的计算,并添加更多的存储。
需要更多的处理和更少的存储该怎么办?不妨试试将更多的节点用于处理速度较高的流数据,而使用较少的节点来存储数据。
以上列出的消息系统一般会将处理和存储放在同一个集群中,但 Apache Pulsar 并非如此。因为服务层和持久层是分离的,所以 Apache Pulsar 可以在保证服务的同时扩展存储。这提供了一个高性价比的容量规划模型。这一设计可以总结为:
在需要支持更多的 consumer 或 producer 时,只需添加更多的 broker。
Pulsar 的另一个优点是零平衡时间(Zero Rebalancing Time)特性。由于 Pulsars 本身独特的分层架构和 broker 是无状态的,因此如果集群中有一个节点可用,它就能立即用于读写操作。
提供给节点的新数据将自动开始写入新的 bookies。Bookie 只允许将数据持久化到磁盘上的日志文件中。即使所有服务器都关闭了,并且存在多个磁盘故障,消息也不会丢失。相反,对于 Kafka 而言,如果消息在集群中所有节点上的 RAM 中,则当前消息可能会丢失。
如需更深入且详细地了解 Pulsar 的架构,参阅:
🔗https://streamnative.io/blog/tech/2019-12-10-design-for-streaming/
>>> 代码 <<<
我们该怎样使用 Pulsar 呢?首先,需要在docker 中启动一个实例。代码如下图所示。
开始之前先来考虑一下我 consume 什么数据呢?Twitter 的 API 看起来不错,那就使用 docker build 来 consume 这些数据吧。这些数据几乎是实时数据,我相信这很适合用于示例。
现在,我将通过 API 读取 Twitter 数据,并持久化到 Pulsar 中。当我尝试消费实时数据(实时数据由最大的数据生成器产生)时,我发现情况更加复杂了。如果需要,我可以从其流中过滤出我想看到的有趣的推文。这一步,我决定过滤有关 Hashmap、Snowflake、Data Engineering 的一些信息。
>>> 总结 <<<
我们可以成功监听 Twitter 数据并过滤特定标签。这真是太棒了!这是在我的本地机器上运行的独立 docker 映像,性能也不错。由于 Pulsar 独特的架构,我认为集群的性能甚至可以更好。
遗憾的是,在撰写本文时,还没有针对 Apache Pulsar 的管理服务。开发 Pulsar 比开发 Confluent Kafka 或 Spark Databricks 需要更多的实践知识。尽管如此,对于那些不介意写代码和管理流服务的人而言,Pulsar 适合你!
如需查看 Twitter Python 代码 ,参阅:
🔗http://adilmoujahid.com/posts/2014/07/twitter-analytics/
想要随时掌握 Pulsar 的研发进展、用户案例和热点话题吗?快来关注 ApachePulsar 和 StreamNative 微信公众号,我们第一时间在这里分享与 Pulsar 有关的一切。
🙋♂️点击「阅读原文」可查看原文章