加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Kafka事务流由基础到实践

发布时间:2019-11-08 17:46:53 所属栏目:建站 来源:虫虫安全
导读:事件源,最终一致性,微服务,CQRS等等,这些越多越多的概念被现代开发者所熟悉。从细粒度的服务组装到复杂的以业务为中心的应用架构,这其中最重要的一块就是以中间件为基础的业务脱藕。本文我们介绍中间件基础构建块事务流。其主导者是Apache Kafka,事

记录对应于事件、消息、命令或任何其他可流式传输的内容。记录的精确划分方式由生产者决定。生产者可以在发布记录时显式分配分区索引,尽管这种方法很少使用。正如我们在前面的示例中所做的那样,一种更常见的方法是为记录分配键。键对Kafka完全不透明,换句话说,Kafka不会去解释key的内容,而是将其视为字节数组。使用一致的哈希技术对这些字节进行哈希处理以得出分区索引。

共享相同散列的记录可以保证占据相同的分区。假设一个主题具有多个分区,则具有不同键的记录可能最终会位于不同的分区中。但是,由于哈希键冲突,具有不同哈希值的记录也可能最终会在同一分区中。

生产者无需关心记录将映射到哪个特定分区,只要相关记录最终在同一分区中并且保留其顺序。同样,消费者对也无需关心分配到那个分区,只要它们以与发布相同的顺序接收记录,并且其分区分配不会与组中的其他消费者重复。

案例:交易平台

假设我们正在寻找上市股票的特定价格模式,并在确定特定模式后发出交易信号。有大量库存,可以理解的是,希望将它们并行处理。但是,任何给定的股票代码的时间序列必须在单个使用者上顺序处理。

Kafka使这个用例以及其他类似用例几乎不容易实现。我们将创建两个主题:价格,用来存储原始价格数据。订单主题,用来保存任何由产生的订单。我们可以多划分一些分区,可以让我们充分的并行操作。

我们可以在价格主题上发布每个价格的记录,并用股票代码作为键。Kafka的自动分区分配将确保每个股票代号由其组中的一个消费者处理。消费者实例可以自由扩展和扩展以匹配处理负载。消费者组应该有意义地命名,理想地反映消费应用程序的目的。比如trading-strategy.abc,它是一种名为" ABC"的虚拟交易策略。

消费者确定了价格模式后,就可以在订单主题上发布另一条消息,订单请求。我们将召集另一个消费组,订单执行,负责读取订单并将其转发给经纪人。

在这个简单的示例中,我们创建了一个完全由事件驱动且高度可扩展的端到端交易管道,假设没有其他瓶颈。我们可以在各个阶段动态添加更多的处理节点,以应对需要增加的负载的情况。

假设您需要在通用数据源的驱动下同时运行的几种交易策略。此外,交易策略将由不同的团队制定;目的是尽可能地使这些实现脱钩,从而使团队能够自主运作,甚至可以使用不同的编程语言和工具链以各自的节奏进行开发和部署。

Kafka事务流由基础到实践

Kafka灵活的多到多pub-sub体系结构将状态消耗与广播语义相结合。通过使用不同的消费群体,Kafka允许不同的应用程序共享输入主题,并按自己的进度处理事件。第二种交易策略将需要一个专门的消费群体:trading-strategy.xyz,将其特定的业务逻辑应用于通用定价流,并将生成的订单发布到相同的订单主题。通过这种方式,Kafka能够从易于重用和组合的离散元素构建模块化事件处理管道。

总结

事务流平台是构建模块化、松耦合、事件驱动的应用程序的高效构建块。在事务流的世界中,Kafka巩固了其成为成功开源解决方案的地位,该解决方案兼顾了灵活性和高性能。并发和并行性是Kafka体系结构的核心,形成部分排序的事务流,可以在可扩展的消费者生态系统中实现负载平衡。消费者及其周围组的简单重新配置可以带来非常不同的事件分配和处理语义。

当然,Kafka并非没有缺陷。可以说Kafka工具是低于标准的。大多数Kafka从业者长期以来都放弃了现成的CLI实用程序,而转向其他开源工具(例如Kafdrop,Kafkacat和第三方商业产品(如Kafka Tool)。 Kafka的配置选项种类繁多,初学的默认值有坑,新手可能会踩到这些坑。总而言之,Kafka代表了构建和构建复杂系统的方式的范式转变,它的优势也是显而易见的。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读