java - 子进程中的 Spring Cloud Stream Kinesis binder 错误
问题描述
我想使用启用了 KPL/KCL 的 Spring Cloud Stream kinesis binder。但是,当我通过使用kpl-kcl-enabled: true
以下错误启用它时,不断出现:
com.amazonaws.services.kinesis.producer.IrrecoverableError: Error starting child process at
com.amazonaws.services.kinesis.producer.Daemon.fatalError(Daemon.java:537) at
com.amazonaws.services.kinesis.producer.Daemon.startChildProcess(Daemon.java:468) at
com.amazonaws.services.kinesis.producer.Daemon.access$100(Daemon.java:63) at
com.amazonaws.services.kinesis.producer.Daemon$1.run(Daemon.java:133) at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at
java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: Cannot run program "/tmp/amazon-kinesis-producer-native-
binaries/kinesis_producer_685427917724EC847D7D65F261E7040F3FCCB039": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) at
com.amazonaws.services.kinesis.producer.Daemon.startChildProcess(Daemon.java:466) ... 5 common frames omitted Caused by: java.io.IOException: error=2, No such file or directory at
java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.<init>(UNIXProcess.java:247) at java.lang.ProcessImpl.start(ProcessImpl.java:134) at
java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) ... 6 common frames omitted
经过多次尝试重新启动它后,它会抛出内存不足异常:
Exception in thread "kpl-daemon-0000" java.lang.OutOfMemoryError: Java heap space
at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:57)
at java.nio.ByteBuffer.allocate(ByteBuffer.java:335)
at com.amazonaws.services.kinesis.producer.Daemon.<init>(Daemon.java:95)
at com.amazonaws.services.kinesis.producer.KinesisProducer$MessageHandler.onError(KinesisProducer.java:168)
at com.amazonaws.services.kinesis.producer.Daemon.fatalError(Daemon.java:537)
at com.amazonaws.services.kinesis.producer.Daemon.startChildProcess(Daemon.java:468)
at com.amazonaws.services.kinesis.producer.Daemon.access$100(Daemon.java:63)
at com.amazonaws.services.kinesis.producer.Daemon$1.run(Daemon.java:133)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
解决方案
KPL 期望 2.5 或更高版本的 glibc 在您的 Linux 版本中可用。
openjdk:8-jdk-alpine
docker image 没有提供。
您需要使用不同的 docker 镜像,例如:openjdk:8-jdk-slim
已经安装了 jdk 和 glibc,或者frolvlad/alpine-glibc
对于带有 glibc 的 alpine 镜像。
推荐阅读
- javascript - 自定义 jQuery 轮播转换错误
- typescript - 使用 TypeScript 装饰器和 Promise 并正确输入?
- excel - Excel是否可以使用嵌套函数?
- reactjs - 在加载元素超时之前使用机器人框架定位元素
- c# - C# int i = +1 是什么意思?
- android-studio - 3.1.4 textAlignment 缺失(Android Studio)
- r - 删除“显示 N 个条目中的 1 到 N 个”闪亮 DT
- c# - Visual Studio 2017 Info.plist 在选项卡更改后丢失分发目标
- java - 如何从带有键的地图中获取值?
- javascript - 具有值 window.getSelection() 的 jquery 全局变量变为空