我希望从建筑学的Angular 澄清一些关于Kafka流的观点。
我了解流处理和数据丰富的用途,并且如果将数据推回到kafka中,这些数据可以被其他应用程序重用,但是streams应用程序的正确实现是什么?
我最初的想法是创建一个应用程序,将一个表拉入,将它连接到一个流,然后为每个条目触发一个事件,而不是将它推回到kafka中。如果多个服务使用这些数据,那么每个服务都将实现它们自己的表,对吗?
我还没有实现一个测试应用程序,它可能会回答其中的一些问题,但我认为这是一个很好的规划地方。基本上,事件应该在哪里触发,在流媒体应用程序中还是在单独的消费者应用程序中?
1条答案
按热度按时间qjp7pelc1#
我最初的想法是创建一个应用程序,将一个表拉入,将它连接到一个流,然后为每个条目触发一个事件,而不是将它推回到kafka中。
在事件驱动架构中,如果您认为kafka主题不应该是与其他应用程序共享事件的目的地,那么应用程序将事件发送到何处(以及如何发送)?你还有其他偏好吗?
如果多个服务使用这些数据,那么每个服务都将实现它们自己的表,对吗?
是的,这是一个选择。
另一个选择是使用kstreams中的交互式查询功能(也称为queryable state),它允许您的第一个应用程序直接(例如,通过restapi)向其他应用程序公开其表和状态存储。其他应用程序则不需要具体化自己的表。然而,架构的一个缺点是,现在通过请求-响应通信,您的第一个应用程序和任何其他下游应用程序之间存在直接耦合。虽然这种直接的服务间通信模式在微服务体系结构中很流行,但是一个引人注目的替代方法是不使用直接通信,而是让微服务/应用通过kafka间接地相互通信(即,使用前面的选项)。
基本上,事件应该在哪里触发,在流媒体应用程序中还是在单独的消费者应用程序中?
这是一个偏好的问题,见上文。要了解您的想法,您可能需要阅读关于kafka事件驱动体系结构的4部分小系列:https://www.confluent.io/blog/journey-to-event-driven-part-1-why-event-first-thinking-changes-everything (免责声明:这个博客系列是我的一个同事写的)。