spring-cloud-dataflow - SCDF Spring Cloud Data Fflow 问题与 task-launcher-dataflow 检测到 Data Flow 服务器版本不兼容
问题描述
我构建一个以 sftp-dataflow 作为源 (sftp-dataflow-source-kafka:2.1.1.RELEASE) 与 task-launcher-dataflow (task-launcher-dataflow-sink-kafka:1.0.2.RELEASE) 连接的流下沉。目标是启动一个作为 spring-batch 作业的任务。
我的 SCDF 平台包含:Skipper-server 版本 2.3.0、dataflow-server 2.4.0 和部署为 docker 的 kafka。
sftp 源向任务启动器发送消息,启动器出现异常:
无法实例化 [org.springframework.cloud.dataflow.rest.client.DataFlowOperations]:工厂方法“dataFlowOperations”抛出异常;嵌套异常是 java.lang.IllegalStateException:检测到不兼容的数据流服务器版本。
我所有的组件都在最新版本中。
要创建可能流:
stream create testStreamSftpDataflowlaunch1 --definition "sftp-dataflow --local-dir=/tmp/local-files1 --remote-dir=/data/docker/containers/SCDF/dockerSCDF/tmp/remote-files1 --password=docker* --allow-unknown-keys=true --username=docker --host=slnxdalicrprp03.mano.es.sopra --task-name=batchEODTask --logging.level.org.springframework.integration=DEBUG --task.launch.request.taskName=batchEODTask | task-launcher-dataflow --server-uri=http://slnxdalicrprp03******:57102" (skipper-server;port)
另一件事,我不明白,启动器如何执行任务,因为任务名称没有通过消息传输到启动器。例如,我们有文件名和其他属性
消息:GenericMessage [payload=/tmp/local-files1/FMO.txt, headers={file_originalFile=/tmp/local-files1/FMO.txt, id=7447a3ab-cd0e-17c2-181d-7b0f5cb85d78, file_name=FMO.txt , file_relativePath=FMO.txt, timestamp=1582106812595}] 2020-02-19 10:06:52.961 DEBUG 233 --- [ask-scheduler-1] osieSourcePollingChannelAdapter:轮询导致消息:GenericMessage [payload=/tmp/local- files1/FMO2.txt, headers={file_originalFile=/tmp/local-files1/FMO2.txt, id=b0fc3c02-a3e2-2481-aa5b-68f9db6b6973, file_name=FMO2.txt, file_relativePath=FMO2.txt, timestamp=1582106812961} ] 2020-02-19 10:06:52.962 调试 233 --- [ask-scheduler-1] osintegration.channel.DirectChannel :在频道“taskLaunchRequestChannel”上预发送,
当我使用 ingestFile 在文档中启动 SCDF 示例时,我们遇到了同样的问题。
你有想法吗?
解决方案
这个帖子有很多。我将尝试在这里解开一些东西。
sftp 源向任务启动器发送消息,启动器出现异常:无法实例化 [org.springframework.cloud.dataflow.rest.client.DataFlowOperations]:工厂方法“dataFlowOperations”抛出异常;嵌套异常是 java.lang.IllegalStateException:检测到不兼容的数据流服务器版本。
似乎 TL-Dataflow 接收器与较旧的 SCDF 客户端库捆绑在一起 - 请参阅tasklauncher-dataflow-app-dependencies/pom.xml#L20。您可以将版本更新到 2.4.0.RELEASE(与您已经运行的 SCDF 相同),并构建应用程序以及本地 docker 映像以供您测试/使用。
另一件事,我不明白,启动器如何执行任务,因为任务名称没有通过消息传输到启动器。
如果您注意 TL-Dataflow 文档,您会注意到输入(又名有效负载)被接受为具有某些键/值对的 JSON。这name
是关键位。它是 SCDF 中已存在的任务定义的名称。我们有一个端到端的配方,可以完整地遍历用例,您可以将其用作参考并继续进行。
最近,我们还添加了自动创建任务定义的增强功能(如果没有)。name
必须与应用注册表中现有的任务应用名称匹配 - 请参阅spring -cloud-stream-app-starters/tasklauncher-dataflow#24。
我相信这涵盖了这篇文章中的紧迫问题。
推荐阅读
- excel - IBM ILOG Concert 的异常:excel:范围大小错误。它必须只有 1 行或 1 行
- python - 从 for 循环中提取某些值
- sql - 如何增加雪花中的最大迭代次数?
- react-native - Redux 在使用 combine reducer 时不工作
- python - 如何按照构造函数中给出的参数顺序执行类方法
- javascript - Outlook 邮件,获取邮件的大小。JS
- python - python没有在正确的目录中搜索文件
- azure - 通过 Azure DevOps 使用专用终结点部署应用服务
- r - 在 R 中绘制多个图形
- python - 如何在python中打印每个嵌套列表的索引0