Pinterest开源适用于Kafka、Flink和MemQ的生产级PubSub Java客户端

Pinterest 开源通用 PubSub 客户端库 PSC

Pinterest 开源了其通用 PubSub 客户端库 PSC,该库已在生产环境中广泛使用了一年半。PSC 帮助工程团队提高了开发速度,并增强了使用该库的服务器的可扩展性和稳定性。超过 90% 的 Java 应用程序已迁移到 PSC,且只需进行最小更改。

背景与挑战

Pinterest 在其平台上广泛使用消息基础设施,包括 Apache Kafka、Apache Flink 和 MemQ。软件工程师 Jeff Xiang 总结了使用不同消息后端所带来的一些挑战:

多年的运营经验告诉我们,我们的客户和业务将大大受益于平台团队拥有和维护的统一 PubSub 接口,这样应用开发者可以专注于应用逻辑,而不是花费宝贵的时间调试客户端-服务器连接问题。

PSC 的功能与架构

Pinterest 创建了一个通用 PubSub 客户端库,提供了统一的抽象和增强的功能,相比原生客户端库更具优势。PSC 支持自动服务发现、优化配置、自动错误处理、拦截器、指标和优化配置。该库提供了两个主要接口:PSC Producer 和 PSC Consumer,每个接口能够管理一个或多个后端生产者或消费者。

PSC 引入了资源名称(RNs)以支持消息主题的自动服务发现。主题引用使用完全限定的 RN 字符串,其中包含建立代理连接所需的所有信息。例如,secure:/rn:kafka:prod:aws_us-west-1:shopping:transaction 指定了主题、集群、区域以及客户端需要连接的后端(Kafka)。这种方法防止了使用原生客户端时因无效的主机/端口组合、SSL 配置选项和凭据、错误区域等导致的意外错误配置。

Flink-PSC 连接器与迁移

工程师们开发了 Flink-PSC 连接器,以实现基于 Flink 的工作负载的无缝迁移。主要迁移挑战是确保新迁移的作业能够从 Flink 检查点文件中恢复其作业状态。

PSC 与原生客户端具有 100% 的功能和 API 兼容性,这使得 Pinterest 能够以最小的代码库更改将超过 90% 的 Java 应用程序迁移到 PSC。迁移任务通常涉及替换导入和引用,并更新客户端配置以利用 PSC 的配置,包括新的资源名称(RN)字符串。

未来计划

Pinterest 计划进一步改进 PSC,包括为更多可修复的错误引入自动错误处理,例如检测和刷新即将过期的 SSL 证书。公司还在开发 C++ 版本,并计划推出 Python 版本。最后,平台团队希望通过利用客户端跟踪功能来支持客户端费用分摊,以便将基础设施成本归因于项目和团队。

反馈与认可

在 LinkedIn 的帖子中,Aaron Lee 评论道:

干得好!一个设计良好的统一客户端对如此核心的基础设施有如此大的下游影响,令人印象深刻。我可以看到其他大型工程团队在利用这一点时会发现很多价值。
阅读 28
0 条评论