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