apache-flink - 我应该在 apache flink 中使用异步代码还是同步代码
问题描述
当我的应用程序与 IO(数据库,第三个 API,...)交互时,我使用 Async 作为 Flink 的推荐:https ://ci.apache.org/projects/flink/flink-docs-stable/dev/流/运营商/asyncio.html。但是我的应用程序通常与数据库交互,我应该总是使用异步吗?
我有很多问题:
- 如果我使用异步(completablefuture),那么我的应用程序不会像使用同步代码时那样被阻塞=>就性能而言,异步代码是更好的同步代码吗?
- 如果我使用同步代码并增加并行,性能如何?
- 当我使用异步代码时,过了一会儿,我的应用程序抛出异常“邮箱处于关闭状态,但需要处于打开状态才能进行放置操作”。看起来它与打开许多线程有关?
解决方案
由于以下原因,使用异步 i/o 更好:
- 更好的资源利用。如果您发出同步请求,那么一项任务将一次只处理一个请求。使用异步请求,单个任务可以处理数十个进行中的请求。
- 当您的用户代码被阻止等待对同步请求的响应时,该操作员无法参与检查点。在最好的情况下,这会使检查点变慢,并可能导致检查点超时和作业失败。
是的,您可以通过增加并行度来使同步 i/o 工作。但这是在一个有更好解决方案的问题上投入资源。
至于邮箱问题,我相信只有在作业关闭时才会发生这种情况。我认为这是导致工作失败的其他问题的副作用。也许在日志中四处寻找正在发生的事情的其他迹象。
推荐阅读
- reactjs - 在 Formik 中使用 ErrorMessage 组件显示 setFieldErrors 的值
- c# - C#:process.OutputDataReceived 并不总是被触发
- javascript - 如何在 Nodejs 中合并多个 docx 文件?
- nginx - Nginx 动态负载均衡
- swift - 可选类型的值必须被解包以引用成员,但它是隐式解包的可选属性
- javascript - 如何从我获得的 API 数据创建项目列表?
- html - HTML JavaScript React:前端 React 组件抛出 react-dom.development.js:506 警告
- python - sklearn.compose.ColumnTransformer() 错误地处理数组中的单个列名?
- redux - React-Saga - 如何使嵌套生成器工作
- php - 我们如何在没有数组名称的情况下将数组从一个文件读取到另一个文件