我正在尝试部署以下流:
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
可视化:
我正在侦听队列,然后根据消息的属性之一将消息发送到其他队列。
我正在使用此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:
答案 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应用程序本身)中。部署的应用程序越多(管道的一部分,流等),使用的内存就越多。