[英]How to install connectors to the docker image of apache kafka connect
[英]How to install Kafka inside a docker image?
我第一次在 docker 上工作,我試圖在 docker 容器上運行我的 pyspark 代碼。 這是我的項目結構。
我的Dockerfile內容:
from gcr.io/datamechanics/spark:platform-3.1-dm14
ENV PYSPARK_MAJOR_PYTHON_VERSION=3
WORKDIR /opt/application/
RUN wget https://jdbc.postgresql.org/download/postgresql-42.2.5.jar
RUN mv postgresql-42.2.5.jar /opt/spark/jars
COPY requirements.txt .
RUN pip3 install -r requirements.txt
COPY main.py .
COPY tweepy_kafka_producer.py .
COPY kafka_spark.py .
docker-compose.yml文件內容:
version: '2'
services:
spark:
image: docker.io/bitnami/spark:3
environment:
- SPARK_MODE=master
- SPARK_RPC_AUTHENTICATION_ENABLED=no
- SPARK_RPC_ENCRYPTION_ENABLED=no
- SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
- SPARK_SSL_ENABLED=no
ports:
- '8080:8080'
spark-worker:
image: docker.io/bitnami/spark:3
environment:
- SPARK_MODE=worker
- SPARK_MASTER_URL=spark://spark:7077
- SPARK_WORKER_MEMORY=1G
- SPARK_WORKER_CORES=1
- SPARK_RPC_AUTHENTICATION_ENABLED=no
- SPARK_RPC_ENCRYPTION_ENABLED=no
- SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
- SPARK_SSL_ENABLED=no
我正在嘗試使用 tweepy 庫讀取推文,將它們發送到 Kafka 並使用 Spark 流從 Kafka 讀取數據。 所有這一切在我的本地運行良好,我試圖了解如何在 docker 容器上運行相同的東西。 為此,我創建了一個 docker 容器,並使用以下命令從我的 requriements.txt 文件安裝了庫:
curl -LO https://raw.githubusercontent.com/bitnami/bitnami-docker-spark/master/docker-compose.yml
docker build -f Dockerfile -t sparkcontainer .
我的 requirements.txt 文件只包含四個包: pyspark, kafka, python-kafka & tweepy
我使用以下步驟啟動了 docker 圖像(8558b79243f8 是我的 docker 圖像名稱):
docker run -i -t 8558b79243f8 /bin/bash
我執行ls
,這些是我看到的文件:
185@f4a100a4ad06:/opt/application$ ls
kafka_spark.py main.py requirements.txt tweepy_kafka_producer.py
當我嘗試運行將數據推送到 kafka 主題的 python 文件時:
185@f4a100a4ad06:/opt/application$ python tweepy_kafka_producer.py
我看到以下錯誤消息:
Traceback (most recent call last):
File "tweepy_kafka_producer.py", line 40, in <module>
producer = KafkaProducer(bootstrap_servers='localhost:9092')
File "/opt/conda/lib/python3.8/site-packages/kafka/producer/kafka.py", line 381, in __init__
client = KafkaClient(metrics=self._metrics, metric_group_prefix='producer',
File "/opt/conda/lib/python3.8/site-packages/kafka/client_async.py", line 244, in __init__
self.config['api_version'] = self.check_version(timeout=check_timeout)
File "/opt/conda/lib/python3.8/site-packages/kafka/client_async.py", line 900, in check_version
raise Errors.NoBrokersAvailable()
kafka.errors.NoBrokersAvailable: NoBrokersAvailable
我知道我必須在 docker 映像中安裝 Kafka。 誰能告訴我如何在我的 docker 圖像中配置 Kafka?
Kafka 和 Spark 是分布式進程; 在 Docker 容器中使用多個進程是一種不好的做法。
相反,向現有的 Docker Compose 文件添加更多服務,該文件是從 Kafka 的現有 Docker Compose 設置中復制的。
我的 requirements.txt 文件只包含四個包:pyspark、kafka、python-kafka 和 tweepy
您不需要兩個 Kafka 依賴項; 你只需要pyspark
和tweepy
,因為 Spark 可以自己寫入 Kafka。
或者,您可以使用沒有 Spark 依賴項的生產者應用程序為普通 Python 容器創建第 5 個(如果算上 Zookeeper)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.