Использование Docker и разъемов для подключения кафки к искре, искры к кассандре и кафки к кассандре - PullRequest
1 голос
/ 07 июля 2019

Деталь: Мы Dockerized Kafka, Cassandra и Spark, используя wurstmeister/kafka, strapdata/elassandra и bde2020/spark-master изображения в docker-compose.

То, что мы хотим сделать, это подключить следующее с помощью соединителей:

  • Поток Кафки к Потоку искры

  • Поток искрына Кассандру

  • Кафка стрим на Кассандру

Проблема в том, что мы не знаем, нормально ли это работает или нет, потому что эти технологии звучатНовое для нас.

Графическое представление:

enter image description here

Важные файлы:

docker-compose.yml

version: '2'
services:
  spark:
    container_name: spark
    image: bde2020/spark-master
    ports: 
      - 9180:8080
      - 9177:7077
      - 9181:8081
    links: 
      - elassandra
    volumes:
hosein:/var/lib/docker/volumes/data/python
      - /home/mostafa/Desktop/kafka-test/together/cassandra/mostafa-hosein:/var/lib/docker/volumes/data/python



  elassandra:
    image: strapdata/elassandra
    container_name: elassandra
    build: /home/mostafa/Desktop/kafka-test/together/cassandra
    env_file:
      - /home/mostafa/Desktop/kafka-test/together/cassandra/conf/cassandra.env
    volumes:
      - /home/mostafa/Desktop/kafka-test/together/cassandra/jarfile:/var/lib/docker/volumes/data/_data
    ports:
      - '7000:7000'
      - '7001:7001'
      - '7199:7199'
      - '9042:9042'
      - '9142:9142'
      - '9160:9160'
      - '9200:9200'
      - '9300:9300'

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

  kafka:
    build: .
    container_name: kafka
    links:
     - zookeeper
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: localhost
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_OPTS: -javaagent:/usr/app/jmx_prometheus_javaagent.jar=7071:/usr/app/prom-jmx-agent-config.yml
      CONNECTORS: elassandra
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on: 
      - elassandra

  kafka_connect-cassandra:
    image: datamountaineer/kafka-connect-cassandra
    container_name: kafka-connect-cassandra
    ports:
      - 8083:8083
      - 9102:9102
    environment: 
      - connect.cassandra.contact.points=localhost
      - KAFKA_ZOOKEEPER_CONNECT =  "zookeeper:2181"
      - KAFKA_ADVERTISED_LISTENERS= "kafka:9092"
      - connect.cassandra.port=9042
      - connector.class=com.datamountaineer.streamreactor.connect.cassandra.sink.CassandraSinkConnector
      - tasks.max=1
    depends_on:
      - kafka
      - elassandra

Dockerfile

FROM wurstmeister/kafka
ADD prom-jmx-agent-config.yml /usr/app/prom-jmx-agent-config.yml
ADD jmx_prometheus_javaagent-0.10.jar /usr/app/jmx_prometheus_javaagent.jar
COPY wait-for-it.sh /wait-for-it.sh
RUN chmod +x /wait-for-it.sh
CMD ["/wait-for-it.sh", "zookeeper:2181", "--", "start-kafka.sh"]

Пример: В качестве примера у меня естьдобавил CONNECTOR: elassandra к переменным окружения контейнера kafka, но я не столкнулся с какой-либо ошибкой и не уверен, является ли она допустимой переменной окружения или нет!

Как мы можем проверить переменные среды и проверить работоспособность соединителей?

1 Ответ

0 голосов
/ 09 июля 2019

Как уже упоминалось, CONNECTORS не является допустимой переменной для контейнера Kafka. Kafka Connect - это отдельный сервис от брокера, поэтому он должен быть отдельным контейнером.

Kafka Connect предоставляет REST API через порт 8083.

Вам необходимо выполнить HTTP-запросы, используя curl, Почтальона и т. Д. Для предоставления Соединителей; они не могут быть загружены только из переменных.

Я не сразу осознаю какие-либо особые свойства, необходимые для контейнеров Datamountainer, но они построены поверх изображений Confluent, и вы можете найти все эти переменные среды здесь - https://github.com/confluentinc/cp-docker-images/blob/5.1.2-post/examples/cp-all-in-one/docker-compose.yml#L64-L86

Это для контейнера Kafka, а не Kafka Connect, так как они начинаются с KAFKA_

  - KAFKA_ZOOKEEPER_CONNECT =  "zookeeper:2181"
  - KAFKA_ADVERTISED_LISTENERS= "kafka:9092

И это для свойств соединителя (которые будут отправлены через JSON), а не переменных окружения.

  - connect.cassandra.contact.points=localhost
  - connect.cassandra.port=9042
  - connector.class=com.datamountaineer.streamreactor.connect.cassandra.sink.CassandraSinkConnector
  - tasks.max=1

Тогда localhost не должно использоваться где-либо в этих свойствах; если вы хотите, чтобы контейнер Connect достиг Кассандры, вы должны использовать "connect.cassandra.contact.points": "elassandra" (имя службы докера)

...