![](/img/trans.png)
[英]Spark, Cassandra and Kafka (SMACK) SaaS or PaaS providers
[英]Using Docker and connectors to connect kafka to spark, spark to cassandra and kafka to cassandra
詳細信息:我們在 docker-compose 中使用wurstmeister/kafka
、 strapdata/elassandra
和bde2020/spark-master
鏡像對Kafka
、 Cassandra
和Spark
進行了wurstmeister/kafka
。
我們想要做的是使用連接器連接以下內容:
Kafka 流到 Spark 流
Spark 流到 Cassandra
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
文件
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 是一個獨立於 broker 的服務,因此需要是一個獨立的容器。
Kafka Connect 在端口 8083 公開了一個 REST API 。
需要使用curl
、 Postman 等方式執行 HTTP 請求,提供 Connectors; 它們不能僅從變量加載。
我沒有立即意識到 Datamountainer 容器所需的任何特定屬性,但它們構建在 Confluent 映像之上,您可以在此處找到所有這些環境變量 - https://github.com/confluentinc/cp-docker-圖像/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"
( "connect.cassandra.contact.points": "elassandra"
服務名稱)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.