我正在使用dotnet和ksql进行PoC。 https://github.com/pablocastilla/kafkiano/
总体思路是看我是否可以使用KSQL实现业务逻辑。在示例中,我介绍了库存中的设备并从中订购。该示例包含以下内容:
两个主要流:
使用这些流,我创建了两个表:
在这两个表之后,我创建了另一个表,该表具有订单和库存中产品之间的差异,只是想知道是否还有产品。
有了最后一个表中的联接和订单流,当处理该订单时,我可以剩下库存。
我将使用产品名称作为键来介绍事件。到目前为止,它在我的机器上运行良好,但是我的问题是:
在大型生产环境中这是否一致?我想知道在并行接收到许多事件时何时破坏一致性的限制。
我如何知道哪些查询先于其他查询执行?我需要先计算库存和订单之间的差异,然后再通过订单流加入该差异
谢谢
KSQL:
//INVENTORY STREAMS
CREATE STREAM InventoryEventsStream (ProductName VARCHAR, Quantity INT) WITH (kafka_topic='INVENTORYEVENTS', key='ProductName', value_format='json');
//TABLE GROUPING BY PRODUCT
CREATE TABLE ProductsStock as select ProductName,sum(Quantity) as Stock from InventoryEventsStream group by ProductName;
// ORDERS STREAMS
CREATE STREAM OrdersCreatedStream (ProductName VARCHAR,Quantity INT, OrderId VARCHAR, User VARCHAR) WITH (kafka_topic='ORDERSEVENTS', key='ProductName', value_format='json');
//TABLE GROUPING BY PRODUCT
CREATE TABLE ProductsOrdered as select ProductName as ProductName,sum(Quantity) as Orders from ORDERSCREATEDSTREAM group by ProductName;
// join with the difference
CREATE TABLE StockByProductTable AS SELECT ps.ProductName as ProductName,ps.Stock - op.Orders as Stock FROM PRODUCTSORDERED op JOIN ProductsStock ps ON op.ProductName = ps.ProductName;
//logic: I want the stock left when I make an order
SELECT ocs.OrderId,ocs.User,sbpt.Stock FROM OrdersCreatedStream ocs JOIN StockByProductTable sbpt ON sbpt.ProductName = ocs.ProductName;
答案 0 :(得分:0)
我复制并粘贴从融合团队获得的github answer:
“我收到您的问题。对您问题的一个最小答案是,只要您的消息在流中可用,它就会立即执行。
一个很好的类比是总是运转的机器。 只要有效负载进入内部,它就会对其进行处理。现在,您可以在链接部分找到您了。您是否在处理后将一些有效负载插入到新的记录流?然后,可以将其称为“链接”。运行/执行CTAS / CSAS语句后,您会看到类似“表/流已创建并正在运行”之类的信息。
您已点燃了一个始终运行的查询!”