假设我有两个Kafka主题, A 和 B 。我正在尝试开发一个从 A 中提取记录的系统,对每条记录应用转换,然后将转换后的记录发布到 B 。在这种情况下,转换涉及通过HTTP调用REST端点。
对Kafka来说相对较新,我很高兴看到Kafka Streams项目已经解决了这类问题(consume-transform-publish)。不幸的是,我发现Kafka流中的转换是阻止操作。本能地,我尝试以非正常方式非阻塞调用HTTP端点。
这是否意味着Kafka Streams在这种情况下不起作用?这是否意味着我必须恢复以阻塞方式调用REST端点?这对Kafka Streams来说甚至是一种可接受的模式吗?基于流的数据处理对我来说还是比较新的,所以我并不完全熟悉它的并发模型。
答案 0 :(得分:3)
更新:在进一步研究之后,我不确定这是不是正确答案......
我是Kafka和Kafka Streams(以下简称“Kafka”)的新手,但遇到并考虑过类似的问题,这是我的观点:
卡夫卡有两个突出的特点:
许多非常好的属性都来自这些功能。例如,我认为stream-based "transactions"是最酷的之一。
但是,这些属性实际上是否是您想要的“功能”,当然取决于应用程序。如果您不希望基于主题分区的并行性强排序处理,那么您可能不希望将Kafka用于该应用程序。
所以,关于:
这是否意味着Kafka Streams在这种情况下不起作用?
它可以工作,但通过增加分区可以实现更高的并行性。
这是否意味着我必须恢复以阻塞方式调用REST端点?
是的,我认为确实如此 - 但我不确定为什么那会是“回归”。就个人而言,这就是我喜欢的Kafka:阻塞代码更简单。如果我想要更多并行性,我可以运行更多线程。毕竟,没有共享状态。