- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
急需降低系统简单性,我们从 Kafka 迁移到了 Pulsar
2021-02-20
要点总结
分布式消息系统支持流和队列两种语义,这两种语义最适合使用的场景有所不同。
Pulsar 的独特之处在于它同时支持流和队列使用场景。
Pulsar 接受多层架构,可以轻松扩展 topic 的数量和大小,比其他消息系统的操作更便捷。
Pulsar 实现可扩展性、牢靠性和其他特性之间的良好平衡。这有助于替换 Iterable 接受的 RabbitMQ 消息系统,并最终替换其他消息系统(如 Kafka 和 Amazon SQS)。
Iterable 公司每天代表客户发送大量营销消息,包括电子邮件、通知、短信、应用程序消息等,并且每天处理更多的用户数据更新、大事、自定义工作流形态。Iterable 日常处理的很多消息都可能触发系统中的其他操作,从而导致系统越来越简单,产品易用性越来越低。随着客户数量不断添加,降低系统简单性迫在眉睫。
Iterable 可以在架构的某些部分改用分布式消息系统,次要用于存储需要 consumer 处理的消息,追踪 consumer 处理消息时的形态,从而降低系统简单性,保证 consumer 专注于处理消息。
Iterable 使用工作队列执行客户指定的营销工作流、webhooks 和其他类型的工作支配或进展。其他组件(如提取用户和大事)使用流模型处理有序消息流。分布式消息系统通常支持流和队列两种语义,而最适合使用这两种语义的场景则有所不同。
流和队列
在流消息系统中,producer 追加数据到“仅追加”消息流中。在每个消息流中,必需按特定挨次处理消息,consumer 在消息流中标记消息的位置。我们可以实行某种策略(如对用户 ID 进行哈希处理)对消息进行分区,使分区成为单独的数据流,添加并行度。由于每个流中的数据不行变,且只保存偏移 entry,因而处理时不会遗漏消息。流适用于注重消息挨次(如提取数据)的场景。Kafka 和 Amazon Kinesis 都使用流语义处理消息。
在队列消息系统中,一个队列可能有多个 producer 和 ducer 向队列发送消息,consumer 从队列中接收消息。接收消息后,consumer 开头处理消息,并在处理完每条消息后向队列消息系统发送 ack。由于多个 consumer 共用一个队列,消息挨次并不重要,因而基于队列的系统很简约对 consumer 进行扩展。消息队列系统适用于不需要按特定挨次执行任务的队列,例如,发送同一封邮件给多个收件人。RabbitMQ 和 Amazon SQS 都是基于队列的消息系统。
通常情况下,消息队列系统可以简化消息级别错误的处理。例如,在发生错误后,RabbitMQ 可以轻松地将消息发送到特定队列,由该队列保留特定时间后,再将消息发送回到原始队列进行重试。RabbitMQ 还可以反馈 ack 失败,这样可以在消息发送失败后重新发送。大多数消息队列在收到 ack 后不会将消息存储在 backlog 中,因而系统无法找到需要新发送的消息,这就添加了调试和灾备的难度。
基于流的系统(如 Kafka)也可以用于队列使用场景,但使用起来有些麻烦。Kafka 支持多种特性,很多客户打算在队列中使用 Kafka。但是由于 Kafka 不能严格依据流指定的挨次处理消息,为开发人员添加很多额外工作。假如 consumer 无法消费消息,导致消息处理速度降低或需要重新消费消息,那么同一流上其他消息的处理速率也会遭到影响。常见的处理方案是将消息发布到另一个 topic 进行重试,但这会添加应用程序的形态管理,提高简单性。
为什么 Iterable 需要新消息系统
Iterable 一直使用 RabbitMQ 的特性,处理大量内部消息。我们自定义存活时间(Time-to-Live,TTL),用于指定重试次数,并实现消息处理中的显示延迟。例如,我们可能会延迟发送营销邮件(在收件人最可能查看邮件时,再发送营销邮件)。我们还需要查阅 ack 失败,来确定重新发送失败的队列消息。
Iterable 的架构简图如下:
在评估 Pulsar 时,我们使用 Kafka 提取消息,使用 RabbitMQ 处理上文提到的全部队列。Kafka 具备相应的功能和排序保证,格外适合提取消息,但由于缺少必要的队列语义,不适合其他使用场景。RabbitMQ 的特性(如延迟)对我们至关重要,这就添加了我们查找替代方案的难度。
在扩展系统时,RabbitMQ 消灭以下问题:
在高负载场景中,RabbitMQ 经常消灭流量把握问题。在内存或其他资源遭到限制时,broker 落后于 producer,流把握机制降低 producer 的速度。
但这会影响 producer,导
您可能关注的文档
最近下载
- (完整版)急性胰腺炎诊治指南.ppt VIP
- 《公路多功能交通调查站设备技术要求》.pdf VIP
- 农村家庭教育的现状与思考论文.doc VIP
- 开发计划点检表.xlsx VIP
- 2024-2025学年部编版历史八年级上册重要知识点.docx VIP
- 植物精油应用研究进展.docx VIP
- 艾滋病病毒抗体快速检测技术手册(2011年版).doc VIP
- 2025年华医网继续教育幼年特发性关节炎护理新进展题库及答案.docx VIP
- YY0127相关标准合集(YY0127.13-2009、YY0127.9-2009、YY0127.6-1999).pdf VIP
- 《平凡的世界》课件-高教版中职语文基础模块上册.pptx VIP
文档评论(0)