流部署卡住,然后失败,日志中没有错误

时间:2019-03-27 06:31:41

标签: java spring-cloud-dataflow

我正在尝试部署以下流:

STREAM_2=:messages > filter --expression="#jsonPath(payload, '$.id')==1" | rabbit --queues=id_1 --host=rabbitmq --routing-key=id_1 --exchange=ex_1 --own-connection=true
STREAM_3=:messages > filter --expression="#jsonPath(payload, '$.id')==2" | rabbit --queues=id_2 --host=rabbitmq --routing-key=id_2 --exchange=ex_1
STREAM_4=:messages > filter --expression="#jsonPath(payload, '$.id')==3" | rabbit --queues=id_3 --host=rabbitmq --routing-key=id_3 --exchange=ex_1
STREAM_1=rabbit --queues=hello_queue --host=rabbitmq > :messages

可视化:

enter image description here

我正在侦听队列,然后根据消息的属性之一将消息发送到其他队列。

我正在使用此docker-compose.yml运行本地系统,但是我切换到RabbitMQ而不是Kafka进行通信。

当我部署流时,需要花费几分钟,直到数据流服务器容器达到最大内存使用量,最后在随机流上失败(有时会杀死该容器)。

日志( stdout stderr )均未显示错误。

我正在使用以下最新版本:

DATAFLOW_VERSION=2.0.1.RELEASE SKIPPER_VERSION=2.0.0.RELEASE docker-compose up

我注意到的另一件事是,我不断得到日志:

  

2019-03-27 09:35:00.485警告70 --- [| adminclient-1] org.apache.kafka.clients.NetworkClient:[AdminClient clientId = adminclient-1]无法建立到节点-1的连接。经纪人可能不可用。

尽管我的docker-compose.yml中没有与Kafka有关的内容。有什么想法吗?

我的YAML中的相关部分:

version: '3'

services:
  mysql:
    image: mysql:5.7.25
    environment:
      MYSQL_DATABASE: dataflow
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: rootpw
    expose:
      - 3306
  dataflow-server:
    image: springcloud/spring-cloud-dataflow-server:${DATAFLOW_VERSION:?DATAFLOW_VERSION is not set!}
    container_name: dataflow-server
    ports:
      - "9393:9393"
    environment:
      - spring.datasource.url=jdbc:mysql://mysql:3306/dataflow
      - spring.datasource.username=root
      - spring.datasource.password=rootpw
      - spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
      - spring.cloud.skipper.client.serverUri=http://skipper-server:7577/api
      - spring.cloud.dataflow.applicationProperties.stream.spring.rabbitmq.host=rabbitmq
    depends_on:
      - rabbitmq

  rabbitmq:
    image: "rabbitmq:3-management"
    ports:
      - "5672:5672"
      - "15672:15672"
    expose:
      - "5672"

  app-import:
    ...

  skipper-server:
    image: springcloud/spring-cloud-skipper-server:${SKIPPER_VERSION:?SKIPPER_VERSION is not set!}
    container_name: skipper
    ports:
    - "7577:7577"
    - "9000-9010:9000-9010"

volumes:
  scdf-targets:

1 个答案:

答案 0 :(得分:0)

看起来我是OOM杀手的受害者。容器崩溃,退出代码为137。

对我而言,最简单的解决方案是为Docker提供更多内存:

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
9a0e3ff0beb8        dataflow-server     0.18%               1.293GiB / 11.71GiB   11.04%              573kB / 183kB       92.1MB / 279kB      49
2a448b3583a3        scdf_kafka_1        7.00%               291.6MiB / 11.71GiB   2.43%               4.65MB / 3.64MB     40.4MB / 36.9kB     73
eb9a70ce2a0e        scdf_rabbitmq_1     2.15%               94.21MiB / 11.71GiB   0.79%               172kB / 92.5kB      41.7MB / 139kB      128
06dd2d6a1501        scdf_zookeeper_1    0.16%               81.72MiB / 11.71GiB   0.68%               77.8kB / 99.2kB     36.7MB / 45.1kB     25
1f1b782ad66d        skipper             8.64%               6.55GiB / 11.71GiB    55.93%              3.63MB / 4.73MB     213MB / 0B          324

船长容器现在正在使用6.55GiB内存,如果有人知道它可能是什么,我将不胜感激。

就目前而言,我接受我的回答,因为它确实提供了一种解决方法,尽管我觉得有比增加Docker的内存限制更好的解决方案。

编辑:

看起来GitHub issue确实是解决方案:

  

流组件(管道的一部分)被部署为应用程序。由于船长部署流,因此这些应用程序已部署到Skipper容器(以及Skipper应用程序本身)中。部署的应用程序越多(管道的一部分,流等),使用的内存就越多。