为什么 Kafka Streams API 中没有异步/非阻塞支持?

Why is there no Async / Non-Blocking Support in Kafka Streams API?

我想知道为什么在 Kafka Stream API 中没有通过简单回调或 Java 的 CompletableFuture 或 Scala Futures 的非阻塞支持。

我明白需要维护分区中的顺序,但我看不出通过阻塞昂贵的资源(线程)来实现排序的原因。

即当我让我的 Kafka Streams 应用程序调用外部服务时,例如在 1 台服务器上的 mapValues 运行 中,我有超过数千个分区,我可能会锁定机器,因为所有线程都被阻塞。有一些像 mapValuesAsync() 这样的 API 方法在这里会很好,不是吗?

另外想象一下,在 Kafka Stream 应用程序上,在其流程中执行多个阻塞操作,每个主题需要更少的分区,运行 就可以解决这个问题。在这里浪费线程看起来不是一个很好的 API 设计。

是否计划为此提供任何支持?或者我在这里监督什么?

异步处理在流处理中一般比较难。这不仅仅是关于订购,还有关于fault-tolerance、跟踪进度等

虽然支持也不是不可能,事实上已经有针对它的设计方案:https://cwiki.apache.org/confluence/display/KAFKA/KIP-408%3A+Add+Asynchronous+Processing+To+Kafka+Streams

随时帮助构建此功能!