首先:我现在已经阅读了一些关于Kafka与微服务相结合的文章,并了解到有多种方式可以使用它。我只是想问一个小问题,因为我仍然不太确定我是否真的理解了整个想法:
让我们从一个小示例开始(请记住,这只是一个示例):假设我有一个存储用户的服务,另一个存储博客帖子。比方说,当我必须持久化一篇新的博客文章时,我有一个用户ID,但我还想将用户名与博客文章一起存储。我们显然不想对用户服务进行同步调用,所以我们寻找另一种解决方案,在这种情况下是与Kafka的解决方案。
如果我没弄错,当用户在数据库中更新时,用户服务应该总是将更新发布到Kafka队列中,我仍然不确定的是博客服务将如何从该队列中提取最新的用户名。
到目前为止,我看到的是:事件是更改事件,博客服务通过读取所有事件在自己的一端重建数据库。我在这里看到的问题是多年的事件,如果出现新的示例,这可能需要一段时间。我看到的另一件事是被动的Kafka查询,不知何故可以查询Kafka的内部状态以获得最新信息。
所以,最后我的问题是:
1.我的方法是以某种方式将用户服务(即拥有用户数据)上的更新发布到某种队列,还是会以另一种方式完成?
1.现在博客服务通过它拥有的用户ID(从该队列)获取用户名的可能性到底是什么?
2条答案
按热度按时间3pvhb19x1#
您的用户主题可以消费到带有Kafka Streams/KsqlDB的KTable中。这将在后台创建一个压缩的主题,以便任何新的USERID事件都将描述向表中的上插入。任何ID的空值都会从表中删除。
然后,您的博客主题将根据该表的键连接/查询其用户ID,以获得一些“UserBlog”联合事件。在较高级别上,它的工作方式与执行远程数据库查找没有什么不同。
Https://kafka.apache.org/32/documentation/streams/developer-guide/dsl-api.html#kstream-ktable-join
您的其他选择包括“每服务数据库”或CQRS微服务模式,其中Kafka仅作为事件总线,消费者服务将事件读取到它们自己的唯一数据库中(这可以通过Kafka Connect来完成)
jhiyze9q2#
我在Kafka的世界里也是新手,但我可以表达我的观点。
**1-OnUserUpdate:**假设您的博客已经存储了用户名,并且用户更新了自己的用户名,在这种情况下,Kafka符合需要,用户服务可以推送一个带有密钥UserID的事件(以保证订单),并赋值一个包含用户名的数据,然后博客服务将消费该消息并轻松更新用户博客。您可以管理策略保留,无需永久存储事件,您可以设置一个月或一周...
**2-OnBlogCreate:**这里有点棘手,你怎么获取用户名,在这种情况下,我认为请求Kafka不是一个好主意,这意味着你将拥有Kafka中的所有用户名,即使它可以做到,这也不是Kaka的主要目标。主题只是数据附加,所以正如你所说,如果你在Kafka中存储数据,你将如何管理用户的更新?