Scala flink提高异步操作的并行性
我们有一个异步函数,异步操作是使用 问题:Scala flink提高异步操作的并行性,scala,apache-flink,flink-streaming,akka-http,Scala,Apache Flink,Flink Streaming,Akka Http,我们有一个异步函数,异步操作是使用 问题: 如果我想提高http请求的并行性,我应该使用akka配置还是有办法通过flink.yamel进行配置 因为Flink也在使用akka,所以这是创建ActorSystem和ExecutionContext的正确方法吗 对于第一个问题,有三种不同的设置可能会影响性能和实际执行的请求数: 并行性,这将导致Flink创建异步函数的多个实例,包括HttpClient的多个实例 函数本身中的并发请求数。调用orderedWait或unorderedWait时,应在
ActorSystem
和ExecutionContext
的正确方法吗对于第一个问题,有三种不同的设置可能会影响性能和实际执行的请求数:
异步函数的多个实例,包括HttpClient
的多个实例
orderedWait
或unorderedWait
时,应在函数中提供容量
,这将限制并发请求的数量李>
异步函数的吞吐量取决于具体情况。您需要记住,AsyncFunction
是在单线程中调用的。这基本上意味着,如果您正在调用的服务的响应时间很长,您只需阻塞等待响应的请求数量,因此唯一的方法是增加并行度'
。但是,通常情况下,更改函数的HttpClient
和容量
的设置会使您获得更好的吞吐量
至于第二个问题,我认为创建多个ActorSystems
没有问题。您可以看到[此处]回答的类似问题。这是一个很好的答案-我想再添加一个注意事项,通常您需要配置连接池(使其更大),以便不限制您的最大速率。看见
class Foo[A,B] extends AsyncFunction[A, B] with {
val akkaConfig = ConfigFactory.load()
implicit lazy val executor: ExecutionContext = ExecutionContext.fromExecutor(Executors.directExecutor())
implicit lazy val system = ActorSystem("MyActorSystem", akkaConfig)
implicit lazy val materializer = ActorMaterializer()
def postReq(uriStr: String, str: String): Future[HttpResponse] = {
Http().singleRequest(HttpRequest(
method = HttpMethods.POST,
uri = uriStr,
entity = HttpEntity(ContentTypes.`application/json`, str))
)
}
override def asyncInvoke(input: A, resultFuture: ResultFuture[B]) : Unit = {
val resultFutureRequested: Future[HttpResponse] = postReq(...)
//the rest of the class ...