0

하나의 소스 및 하나의 싱크 서비스로 샘플 (우분투 리눅스 컴퓨터에서 실행) 샘플을 테스트하고 있습니다. 내 모든 서비스는 도킹 장치로되어 있으며 메시지 브로커로 kafka를 사용하고 싶습니다. docker-compose.yml의 관련 부분 아래Kafka 브로커가 Zookeeper에 연결할 수없는 Dockerized Spring Cloud Stream 서비스

:

여기
zookeeper: 
    image: confluent/zookeeper 
    container_name: zookeeper 
    ports: 
     - "2181:2181" 


    kafka: 
    image: wurstmeister/kafka:0.9.0.0-1 
    container_name: kafka 
    ports: 
     - "9092:9092" 
    links: 
     - zookeeper:zk 
    environment: 
     - KAFKA_ADVERTISED_HOST_NAME=192.168.33.101 
     - KAFKA_ADVERTISED_PORT=9092 
     - KAFKA_DELETE_TOPIC_ENABLE=true 
     - KAFKA_LOG_RETENTION_HOURS=1 
     - KAFKA_MESSAGE_MAX_BYTES=10000000 
     - KAFKA_REPLICA_FETCH_MAX_BYTES=10000000 
     - KAFKA_GROUP_MAX_SESSION_TIMEOUT_MS=60000 
     - KAFKA_NUM_PARTITIONS=2 
     - KAFKA_DELETE_RETENTION_MS=1000 

    . 
    . 
    . 

    # not shown: eureka service registry, spring cloud config service, etc. 

    myapp-service-test-source: 
    container_name: myapp-service-test-source 
    image: myapp-h2020/myapp-service-test-source:0.0.1 
    environment: 
     SERVICE_REGISTRY_HOST: 192.168.33.101 
     SERVICE_REGISTRY_PORT: 8761 
    ports: 
     - 8081:8080 

    . 
    . 
    . 

service-test-source 서비스에 대한 application.yml의 관련 부분 :

spring: 
    cloud: 
    stream: 
     defaultBinder: kafka 
     bindings: 
     output: 
      destination: messages 
      content-type: application/json 
     kafka: 
     binder: 
      brokers: ${SERVICE_REGISTRY_HOST:192.168.33.101} 
      zkNodes: ${SERVICE_REGISTRY_HOST:192.168.33.101} 
      defaultZkPort: 2181 
      defaultBrokerPort: 9092 

문제 다음은, 내가 위의 docker-compose를 시작하는 경우, test-source 컨테이너 로그에서 서비스가 사육사에게 연결하지 못하는 것을 확인하고 반복 세트를 부여하면 연결이 거부되었습니다 오류가 발생하여 서비스가 종료되는 ZkTimeoutException으로 끝납니다 (아래 참조).

이상한 사실은 대신 고정 표시기 컨테이너로 내 소스 (및 싱크) 테스트 서비스를 실행하는 내가 받는다는 mvn spring-boot:run <etc...>를 통해 jar 파일로 실행하면 서비스가 잘 작동하고 카프카를 통해 메시지를 교환 할 수 있다는 것입니다. (kafka, 사육사 등은 여전히 ​​도커 컨테이너로 실행 중임).

. 
. 
. 

*** THE FOLLOWING REPEATED n TIMES *** 
2017-02-14 14:40:09.164 INFO 1 --- [localhost:2181)] org.apache.zookeeper.ClientCnxn   : Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error) 
2017-02-14 14:40:09.166 WARN 1 --- [localhost:2181)] org.apache.zookeeper.ClientCnxn   : Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect 

java.net.ConnectException: Connection refused 
     at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[na:1.8.0_111] 
     at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) ~[na:1.8.0_111] 
     at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:361) ~[zookeeper-3.4.6.jar!/:3.4.6-1569965] 
     at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1081) ~[zookeeper-3.4.6.jar!/:3.4.6-1569965] 


. 
. 
. 

java.lang.reflect.InvocationTargetException 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:498) 
     at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53) 
     at java.lang.Thread.run(Thread.java:745) 
     Caused by: org.springframework.context.ApplicationContextException: Failed to start bean 'outputBindingLifecycle'; nested exception is org.I0Itec.zkclient.exception.ZkTimeoutException: Unable to connect to zookeeper server within timeout: 10000 

어떤 문제일까요?

편집 :

2017-02-15 14:24:04.159 INFO 10348 --- [localhost:2181)] org.apache.zookeeper.ClientCnxn   : Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error) 
2017-02-15 14:24:04.159 INFO 10348 --- [localhost:2181)] org.apache.zookeeper.ClientCnxn   : Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error) 
2017-02-15 14:24:04.178 INFO 10348 --- [localhost:2181)] org.apache.zookeeper.ClientCnxn   : Socket connection established to localhost/127.0.0.1:2181, initiating session 
2017-02-15 14:24:04.201 INFO 10348 --- [localhost:2181)] org.apache.zookeeper.ClientCnxn   : Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x15a421fd9ec000a, negotiated timeout = 10000 
2017-02-15 14:24:05.870 INFO 10348 --- [   main] org.apache.zookeeper.ZooKeeper   : Initiating client connection, connectString=localhost:2181 sessionTimeout=6000 [email protected] 
2017-02-15 14:24:05.882 INFO 10348 --- [localhost:2181)] org.apache.zookeeper.ClientCnxn   : Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181. Will not attempt to authenticate using SASL (unknown error) 
2017-02-15 14:24:05.883 INFO 10348 --- [localhost:2181)] org.apache.zookeeper.ClientCnxn   : Socket connection established to localhost/0:0:0:0:0:0:0:1:2181, initiating session 
:

본인은 "항아리"실행 로그 아래 냈다 로그에서 볼 수있는 바와 같이 test-source 서비스의 IP 127.0.0.1을 통해 사육사에 연결을 시도하는 것을 발견

이것은 모든 것이 jar 실행에서 작동하지만 docker는 작동하지 않는 이유를 설명합니다. (사육사 컨테이너는 2181 포트를 호스트 시스템으로 내 보내서 호스트 시스템에서 직접 실행될 때 서비스 프로세스의 로컬 호스트로 표시됩니다) proble을 풀지 마라. m : 분명히 봄 구름 스트림 카프카 설정은 을 application.yml으로 설정 한 것으로 무시합니다. (서비스에서 그런 환경 변수의 값을 기록하면 디버깅 목적으로 하드 코딩 된 192.168.33.101의 올바른 값을 볼 수 있습니다) .

+0

확실히 속성 설정을 무시하는 것 : 나는 일부 쓰레기를 넣어 시도 가치가 있었고 계속 작동했습니다 ... (물론 dockerized가 아닌 버전에서). 나는 또한 'application.yml'에서'bootstrap.yml'으로 프로퍼티를 이동하려고 시도했지만 이전과 동일합니다 ... – chrx

+0

이 질문의 제목은 재미 있습니다! – benPearce

+0

설명해 주시겠습니까? – chrx

답변

1

카프카 바인더 구성을 사용하려고 시도 할 때 defaultBinder를 rabbit으로 설정했습니다. 응용 프로그램의 클래스 경로에 rabbitkafka 바인더가 있습니까?

이미지 :이 경우, 당신은 here

+0

맞아요, 나는 실수를 한 것으로 알고 있습니다. 게시물을 쓰고 속성 파일 텍스트를 변경 한 다음 올바른 설정으로 다시 테스트를 수행했지만 변경된 사항은 없습니다. 질문의 텍스트를 업데이트하는 것을 잊어 버렸습니다. 지금하겠습니다. – chrx

0

사육사 사용할 수 있습니다 wurstmeister/사육사

container_name: 'zookeeper' 

ports: 
    - 2181:2181 

을 -------------------- - 카프카 --------------------------------

카프카 :

image: wurstmeister/kafka 
container_name: 'kafka' 
environment: 
    - KAFKA_ADVERTISED_HOST_NAME=kafka 
    - KAFKA_ADVERTISED_PORT=9092 
    - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 
    - KAFKA_CREATE_TOPICS=kafka_docker_topic:1:1 
ports: 
    - 9092:9092 
depends_on: 
    - zookeeper 

봄 :

프로파일 : dev에

클라우드 :

스트림 :

defaultBinder : 카프카

kafka: 

    binder: 

     brokers: kafka  # i added brokers and zkNodes property 

     zkNodes: zookeeper # 

     bindings: 

     input: 

     destination: message 

     content-type: application/json