首页 > 解决方案 > 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 示例时,我们遇到了同样的问题。

你有想法吗?

标签: spring-cloud-dataflow

解决方案


这个帖子有很多。我将尝试在这里解开一些东西。

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

我相信这涵盖了这篇文章中的紧迫问题。


推荐阅读