当前位置: 首页 > 知识库问答 >
问题:

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

裴欣荣
2023-03-14

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

我确实理解需要维护分区中的排序,但是在跨分区中,我看不出有什么理由通过阻塞一个昂贵的资源来实现排序:线程。

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

对此是否有任何支持计划?还是我在这里监督什么?

共有1个答案

岳俊晖
2023-03-14

异步处理在流处理中通常很难。它不仅仅是关于订购,还包括容错、跟踪进度等。

不过,支持并不是不可能的,事实上已经有了一个针对它的设计方案:https://cwiki.apache.org/confluence/display/kafka/kip-408%3a+add+asynchronous+processing+to+kafka+streams

请随时帮助构建此功能!

 类似资料:
  • 我认为下面的流量链将通过事件循环放置/执行(像JS)。因此,运行下面的代码将首先打印阻塞循环&然后将执行通量链。 但是,整个通量总是先执行,然后才移动到循环。[我确实有一些语句正在阻塞。但是有两个阶段] 当我们使用reactor时,通过使用一些调度程序来实现异步/非阻塞行为的唯一方法? 如果我不使用任何调度器,并让代码使用当前线程执行,那么即使对于IO密集型应用程序,使用WebFlux而不是Spr

  • 问题内容: 在服务器端Javascript引擎的上下文中,什么是非阻塞I / O或异步I / O?我认为这是相对于Java服务器端实现的优势。 问题答案: 同步执行通常是指按顺序执行的代码。异步执行是指未按照代码中出现的顺序运行的执行。在以下示例中,同步操作导致警报按顺序触发。在异步操作中,虽然似乎执行第二次,但不是。 同步:1,2,3 异步:1,3,2 阻塞与非阻塞 阻塞是指阻塞进一步执行直到该

  • 本文向大家介绍请你说一下阻塞,非阻塞,同步,异步相关面试题,主要包含被问及请你说一下阻塞,非阻塞,同步,异步时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 阻塞和非阻塞:调用者在事件没有发生的时候,一直在等待事件发生,不能去处理别的任务这是阻塞。调用者在事件没有发生的时候,可以去处理别的任务这是非阻塞。 同步和异步:调用者必须循环自去查看事件有没有发生,这种情况是同步。调用者不用自己去查看

  • 本文向大家介绍java 中同步、异步、阻塞和非阻塞区别详解,包括了java 中同步、异步、阻塞和非阻塞区别详解的使用技巧和注意事项,需要的朋友参考一下 java 中同步、异步、阻塞和非阻塞区别详解 简单点说: 阻塞就是干不完不准回来,一直处于等待中,直到事情处理完成才返回; 非阻塞就是你先干,我先看看有其他事没有,一发现事情被卡住,马上报告领导。 我们拿最常用的send和recv两个函数来说吧..

  • 实时的web特性通常需要为每个用户一个大部分时间都处于空闲的长连接. 在传统的同步web服务器中,这意味着需要给每个用户分配一个专用的线程,这样的开销是十分巨大的. 为了减小对于并发连接需要的开销,Tornado使用了一种单线程事件循环的方式. 这意味着所有应用程序代码都应该是异步和非阻塞的,因为在同一时刻只有一个操作是有效的. 异步和非阻塞这两个属于联系十分紧密而且通常交换使用,但是它们并不完全

  • 从进程调度谈起 现代操作系统(如 Windows、Linux 等)都是分时系统。分时系统允许同时允许多个任务,但实际上,由于一台计算机通常只有一个 CPU,所以不可能真正地同时运行多个任务。这些进程实际上是轮番运行,每个进程运行一个时间片。由于时间片通常很短,用户不会感觉到,所以这些进程看起来就像是同时运行。 每个进程的时间片由操作系统完成初始化,所有进程轮番地执行相应的时间。具体下一个时间片轮到