Ошибка с docker-compose при запуске микросервиса с kafka и zookeeper - PullRequest
0 голосов
/ 09 мая 2018

РЕШИТЬ! спасибо, ребята, я собираюсь обновить правильный конфиг для работы.

Я пытаюсь сделать свой первый микросервис с помощью spring-boot, kafka и zookeeper через docker-compose. Я иду по стопам https://docs.docker.com/compose/gettingstarted/ но когда я пытаюсь поднять службы с помощью команды docker-compose up, я получаю исключение:

demo-quartz_1  | web - 2018-05-09 14:57:48,824 [scheduler_Worker-2] INFO  c.a.d.service.SampleJobService - created entity...
demo-quartz_1  | web - 2018-05-09 14:57:48,824 [scheduler_Worker-2] INFO  c.a.d.service.SampleJobService - BitcoinEuroEntity [idBCEntity=8, id=bitcoin, name=Bitcoin, symbol=BTC, rank=1, priceUsd=9299.31, priceBtc=1.0, _24hVolumeUsd=7170100000.0, marketCapUsd=158311453440, availableSupply=17024000.0, totalSupply=17024000.0, maxSupply=21000000.0, percentChange1h=0.05, percentChange24h=1.36, percentChange7d=1.7, lastUpdated=1525877672, priceEur=7830.80946135, _24hVolumeEur=6037833658.5, marketCapEur=133311700270]
demo-quartz_1  | web - 2018-05-09 14:58:38,868 [scheduler_Worker-1] ERROR o.s.k.s.LoggingProducerListener - Exception thrown when sending a message with key='null' and payload='BitcoinEuroKafkaEntity [id=bitcoin, name=Bitcoin, symbol=BTC, rank=1, priceUsd=9299.31, priceBtc=1.0...' to topic aironman:
demo-quartz_1  | org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.

Я вижу, что контейнеры zookeeper, kafka и micro service нормально работают в своих контейнерах:

$:demo-quartz aironman$ docker ps
CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS              PORTS                                                NAMES
f9201046956c        wurstmeister/kafka                    "start-kafka.sh"         7 minutes ago       Up 6 minutes        0.0.0.0:9092->9092/tcp                               demo-quartz_kafka_1
386270f126da        aironman/demo-quartz:0.0.1-SNAPSHOT   "/usr/bin/java -jar …"   7 minutes ago       Up 6 minutes                                                             demo-quartz_demo-quartz_1
ac1df2c6429d        wurstmeister/zookeeper                "/bin/sh -c '/usr/sb…"   7 minutes ago       Up 6 minutes        22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp   demo-quartz_zookeeper_1

Это GitHub репо ветвь разработки

Файл Docker выглядит так:

FROM openjdk:8-jre
ENTRYPOINT ["/usr/bin/java", "-jar", "/usr/share/aironman/demo-quartz.jar"]
ARG JAR_FILE
ADD target/${JAR_FILE} /usr/share/aironman/demo-quartz.jar

Файл Docker-compose.yml выглядит так:

version: '3.6'
services:
demo-quartz:
image: aironman/demo-quartz:0.0.1-SNAPSHOT
deploy:
  replicas: 5
  resources:
    limits:
      cpus: "0.5"
      memory: 512M
  restart_policy:
      condition: on-failure

  zookeeper:
  image: wurstmeister/zookeeper
  ports:
  - "2181:2181"

  kafka:
  image: wurstmeister/kafka
  ports:
  - "9092:9092"
  environment:
  KAFKA_BROKER_ID: 1
  KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
  KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
  KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
  volumes:
  - /var/run/docker.sock:/var/run/docker.sock

Это ссылка полного вывода команды docker-compose up:

файл application.properties микро сервиса выглядит так:

using.spring.schedulerFactory=true
kafka.bootstrapAddress=kafka:9092
message.topic.name=aironman
greeting.topic.name=greeting
filtered.topic.name=filtered
partitioned.topic.name=partitioned

Я смотрел на другие потоки в stackoverflow с похожими проблемами, но ни один из них не помог мне решить проблему, подняв микросервис вместе с zookeeper и kafka, разговаривающими друг с другом без каких-либо проблем.

Похоже, что микросервис не может связываться с kafka, а zookeeper - нет, потому что docker-compose запускает контейнер, но контейнер микросервиса не может общаться друг с другом. Если я запускаю процесс локально с помощью mvn spring-boot: запускаю и запускаю локально zookeeper и kafka, он работает нормально, я могу вставить сообщение в тему.

Можете ли вы привести меня к правильному решению?

Спасибо, ребята, я многому научился!

:demo-quartz aironman$ docker exec -it 693ab89a26fb  /bin/sh
/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:13:00:03  
      inet addr:172.19.0.3  Bcast:172.19.255.255  Mask:255.255.0.0
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:227 errors:0 dropped:0 overruns:0 frame:0
      TX packets:390 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0 
      RX bytes:20677 (20.1 KiB)  TX bytes:30809 (30.0 KiB)

lo        Link encap:Local Loopback  
      inet addr:127.0.0.1  Mask:255.0.0.0
      UP LOOPBACK RUNNING  MTU:65536  Metric:1
      RX packets:6 errors:0 dropped:0 overruns:0 frame:0
      TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1 
      RX bytes:590 (590.0 B)  TX bytes:590 (590.0 B)

/ # ping 172.19.0.2
PING 172.19.0.2 (172.19.0.2): 56 data bytes
64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.190 ms
64 bytes from 172.19.0.2: seq=1 ttl=64 time=0.167 ms
64 bytes from 172.19.0.2: seq=2 ttl=64 time=0.121 ms
64 bytes from 172.19.0.2: seq=3 ttl=64 time=0.173 ms
64 bytes from 172.19.0.2: seq=4 ttl=64 time=0.173 ms
^C
--- 172.19.0.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.121/0.164/0.190 ms
/ # 
/ # 
/ # 
/ # kafka-topics.sh --list --zookeeper 172.19.0.2:2181
/ # kafka-topics.sh --create --zookeeper 172.19.0.2:2181 --replication-factor 1 
--partitions 1 --topic aironman 
Created topic "aironman".
/ # kafka-topics.sh --list --zookeeper 172.19.0.2:2181
aironman

Я вижу, что тема создана в kafka broker, но исключение все равно происходит.

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Я получил его для работы с этой конфигурацией для Кафки.

kafka:
image: wurstmeister/kafka
depends_on:
  - zookeeper
ports:
  - "9092:9092"
environment:
  KAFKA_BROKER_ID: 1
  KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
  KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
  KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092

Основная конфигурация состоит в том, чтобы имя службы докера и объявленное имя хоста совпадали (в данном случае kafka). В ваших application.properties вы можете использовать kafka.bootstrapAddress = kafka: 9092.

Поскольку все службы Docker записаны в одном и том же docker-compose.yml, все они будут участвовать в одной сети по умолчанию и смогут разрешать друг друга по имени службы.

Обновление : Использование docker-compose из исходного вопроса и с несколькими обновлениями.

 version: '3.3'
    services:
      demo-quartz:
        image: aironman/demo-quartz:0.0.1-SNAPSHOT

      zookeeper:
        image: wurstmeister/zookeeper
        ports:
          - "2181:2181"
      kafka:
        image: wurstmeister/kafka
        ports:
          - "9092:9092"
        environment:
          KAFKA_BROKER_ID: 1
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
          KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
          KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092

Это прекрасно работает. Обновили ли вы URL начальной загрузки для bootstrap.servers = kafka: 9092? Также демо-кварц использует старую версию Kafka Client. Пожалуйста обновите.

web - 2018-05-09 18:17:29,260 [scheduler_Worker-1] INFO  o.a.kafka.common.utils.AppInfoParser - Kafka version : 0.10.1.1
web - 2018-05-09 18:17:29,260 [scheduler_Worker-1] INFO  o.a.kafka.common.utils.AppInfoParser - Kafka commitId : f10ef2720b03b247

Вы можете создать пример образа докера производителя kafka здесь: https://github.com/vallikranth/kafka-spring-producer и проверить свои настройки.

0 голосов
/ 09 мая 2018

Я ни в коем случае не эксперт по Docker, но я считаю, что созданный тип сети по умолчанию - это мостовая сеть. В мостовых сетях вам необходимо явно связать сервисы, чтобы они могли видеть друг друга.

Например: version: '3.6' services: demo-quartz: image: aironman/demo-quartz:0.0.1-SNAPSHOT deploy: replicas: 5 resources: limits: cpus: "0.5" memory: 512M restart_policy: condition: on-failure links: - kafka - zookeeper zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181" kafka: image: wurstmeister/kafka ports: - "9092:9092" links: - zookeeper environment: KAFKA_ADVERTISED_HOST_NAME: 192.168.99.100 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 volumes: - /var/run/docker.sock:/var/run/docker.sock

...