【问题标题】:Using Docker and connectors to connect kafka to spark, spark to cassandra and kafka to cassandra使用 Docker 和连接器将 kafka 连接到 spark、spark 到 cassandra 以及 kafka 到 cassandra
【发布时间】:2023-03-10 05:15:02
【问题描述】:

详细信息:我们在 docker-compose 中使用了wurstmeister/kafkastrapdata/elassandrabde2020/spark-masterKafkaCassandraSpark 进行了dockerized。

我们要做的是使用连接器连接以下内容:

  • Kafka 流到 Spark 流

  • 向 Cassandra 发送 Spark 流

  • Kafka 流到 Cassandra

问题是我们不知道它是否正常工作,因为这些技术对我们来说听起来很新鲜。

图形表示:

重要文件:

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 容器的环境变量中,但我没有遇到任何错误,并且不确定它是否是有效的环境变量!

我们如何验证环境变量并测试连接器是否正常工作?

【问题讨论】:

  • CONNECTORS 对 kafka 容器没有任何作用... Kafka Connect 必须是一个单独的容器
  • @cricket_007 我发现一张没有任何有用文档的图片,我的意思是datamountaineer/kafka-connect-cassandra。您知道如何使用此图像将 kafka 连接到 cassandra 吗?因为我已经分别运行了 kafka 和 cassandra 图像。
  • 我没用过那个。我通常使用 confluentinc 图像,但我认为这些图像不包括 Cassandra。没有 Docker 的文档在这里 docs.lenses.io/connectors/sink/cassandra.html 但 Kafka Connect API 本身可以在 Apache 或 Confluent 站点上找到
  • @cricket_007 confluentinc 图像在 docker hub 上找不到了!
  • 你最近检查过那个链接吗@RobinMoffatt?我面临页面未找到错误!

标签: apache-spark cassandra apache-kafka docker-compose connector


【解决方案1】:

如前所述,CONNECTORS 不是 Kafka 容器的有效变量。 Kafka Connect 是一个独立于代理的服务,因此需要是一个单独的容器。

Kafka Connect exposes a REST API 在端口 8083。

需要使用curl、Postman等来执行HTTP请求,提供Connector;它们不能仅从变量中加载。

我没有立即知道 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 容器到达 Cassandra,您可以使用 "connect.cassandra.contact.points": "elassandra"(docker 服务名称)

【讨论】:

    猜你喜欢
    • 2018-08-17
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2015-09-04
    • 1970-01-01
    • 2015-03-18
    • 2017-06-27
    相关资源
    最近更新 更多