如何用spring云流kafka查询微服务事件源架构中的事件库

hrirmatl  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(438)

澄清:请注意,这个问题与这个问题不同:如何使用spring云流kafka和每个服务的数据库实现一个微服务事件驱动架构
这一个是关于使用kafka作为唯一的存储库(事件),不需要db,另一个是关于每个服务使用一个数据库(mariadb)+kafka。
我想实现一个事件源架构来处理分布式事务:

OrdersService <------------> | Kafka Event Store | <------------>PaymentsService
                subscribe/                           subscribe/
                   find                                 find

ordersservice接收订单请求并将新订单存储在代理中。

private OrderBusiness orderBusiness;    

@PostMapping
public Order createOrder(@RequestBody Order order){
    logger.debug("createOrder()");
    //do whatever
    //Publish the new Order with state = pending
    order.setState(PENDING);
    try{       
       orderSource.output().send(MessageBuilder.withPayload(order).build());
    }catch(Exception e){
        logger.error("{}", e);
    }
    return order;
}

这是我的主要疑问:如何查询Kafka经纪人?假设我想按用户/日期、状态等搜索订单。

klsxnrf1

klsxnrf11#

简而言之:您不能查询代理,但可以利用kafka的streamsapi和“交互式查询”。
长话短说:阅读Kafka主题的访问模式是线性扫描,而不是随机查找。当然,您也可以随时通过 #seek() ,但仅限于偏移量或时间。此外,主题被分为多个分区,数据(默认情况下)按键进行哈希分区(数据模型是键值对)。所以有钥匙的概念。
但是,您可以使用kafka的streams api,它允许您构建一个保持当前状态的应用程序(基于kafka主题,这是基本事实)作为物化视图(基本上是缓存)“交互式查询”允许您查询此物化视图。
有关更多详细信息,请参阅以下两篇博文:
https://www.confluent.io/blog/unifying-stream-processing-and-interactive-queries-in-apache-kafka/
https://www.confluent.io/blog/data-dichotomy-rethinking-the-way-we-treat-data-and-services/

相关问题