簡體   English   中英

如何在 docker 圖像中安裝 Kafka?

[英]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 依賴項; 你只需要pysparktweepy ,因為 Spark 可以自己寫入 Kafka。

或者,您可以使用沒有 Spark 依賴項的生產者應用程序為普通 Python 容器創建第 5 個(如果算上 Zookeeper)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM