我想知道为什么Kafka Stream API中没有通过简单的回调或Java的CompletableFuture或Scala Futures提供无阻塞支持。
我确实知道需要维护分区中的顺序,但是在各个分区之间,我看不到通过阻塞昂贵的资源(线程)来实现排序的原因。
即当我让我的Kafka Streams应用程序调用外部服务时,例如在1台服务器上运行的mapValues中,并且我有成千上万个分区,由于所有线程都被阻塞,我可能会锁定机器。拥有一些诸如mapValuesAsync()之类的API方法在这里会很好,不是吗?
还要想像一下,在Kafka Stream App上,它在流程中执行了几项阻止操作,因此每个主题所需的分区数将减少,以解决问题。浪费线程在这里看起来并不是一个不错的API设计。
是否为此计划了任何支持?还是我在这里监督一些事情?
答案 0 :(得分:1)
异步处理通常很难在流处理中进行。这不仅与订购有关,还与容错,跟踪进度等有关。
虽然并非没有可能提供支持,但实际上已经有一个设计建议:https://cwiki.apache.org/confluence/display/KAFKA/KIP-408%3A+Add+Asynchronous+Processing+To+Kafka+Streams
随时帮助构建此功能!