首页 > 解决方案 > 无法通过 curl 请求使用 post 请求在 Flink 中提交作业(请求不匹配...)

问题描述

我试图向在 Kubernetes 集群上运行的 Flink 作业管理器发送一个发布请求。在为不需要任何命令行参数的类发送 /jar/run 的发布请求时,它工作正常。但是,当尝试在需要命令行参数的同一个 jar 中提交不同的类时,会出现以下错误。-: {"errors":["Request did not match expected format JarRunRequestBody."]}'

但是,在传递命令行参数并直接提交作业时,如下所示 - :

./flink run -m localhost:30287 -c com.class.name ~/path/to/jar/1.0-1.0-SNAPSHOT.jar --bootstrap.servers izac-cp-kafka:9092 --group.id test --topic bank_transaction --schema.registry http://mysr-schema-registry:8081 --CepJson """{\"keyId\": \"customer_id\",\"pattern\": [{\"patternName\": \"p1\",\"simpleCondition\":{\"columnName\": \"amount\",\"operator\": \">\",\"value\": \"50\",\"dataType\": \"Int\"}},{\"patternName\":\"p2\",\"simpleCondition\":{\"columnName\":\"amount\",\"operator\":\">\",\"value\":\"30\",\"dataType\":\"Int\"}}],\"connector\":[{\"name\":\"begin\",\"connectorType\":\"next\",\"start\":\"p1\",\"end\":\"p2\"}]}"""

要将上述命令转换为基于 flink REST 的发布请求,我执行了以下操作:

curl -k -v -X POST -H "Content-Type: application/json" --data '{    "entryClass":"com.class.name",   "programArgsList": [        "--bootstrap.servers izac-cp-kafka:9092",        "--group.id test",        "--topic bank_transaction",        "--schema.registry http://mysr-schema-registry:8081",        "--CepJson """{\"keyId\": \"customer_id\",\"pattern\": [{\"patternName\": \"p1\",\"simpleCondition\":{\"columnName\": \"amount\",\"operator\": \">\",\"value\": \"50\",\"dataType\": \"Int\"}},{\"patternName\":\"p2\",\"simpleCondition\":{\"columnName\":\"amount\",\"operator\":\">\",\"value\":\"30\",\"dataType\":\"Int\"}}],\"connector\":[{\"name\":\"begin\",\"connectorType\":\"next\",\"start\":\"p1\",\"end\":\"p2\"}]}""""]}' http://localhost:30287/jars/2a788e33-c92d-47c4-84af-31e3dff28666_1.0-1.0-SNAPSHOT.jar/run

但是,这给出了前面提到的错误。我只是想将上面的命令行作业提交转换为基于rest api的提交到flink集群。

注意 - :发布请求是针对已经包含所需 Jar 的 flink 集群。我只想提交使用特定课程的作业。

标签: apache-flinkflink-streamingflink-cep

解决方案


我不认为 curl"""像 scala 那样接受字符串插值,因此它肯定不会发送正确CepJson的参数,所以我将从更改它开始。


推荐阅读