Kafka Spark Streaming: брокер может быть недоступен [Docker]

Я новичок в докере. Я пытаюсь запустить потоковое приложение искры с помощью докера.

У меня есть потоковое приложение kafka и spark, работающее отдельно в 2 контейнерах.

Моя служба kafka работает нормально. Я тестировал с помощью $KAFKA_HOME/bin/kafka-console-producer.sh и $KAFKA_HOME/bin/kafka-console-consumer.sh. Я могу получать сообщения.

Но когда я запускаю приложение потоковой передачи искры, оно показывает:

[Consumer clientId=consumer-1, groupId=consumer-spark] Connection to node -1 could not be established. Broker may not be available.

Итак, я не могу потреблять сообщения.

кафка: docker-compose.yml

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    build: .
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: kafka
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
      KAFKA_LISTENERS: PLAINTEXT://:9092
    depends_on: 
      - zookeeper
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Код потоковой передачи искры:

val sparkConf = new SparkConf().setAppName("Twitter Ingest Data")
    sparkConf.setIfMissing("spark.master", "local[2]")
    val ssc = new StreamingContext(sparkConf, Seconds(2))

    val kafkaTopics = "sentiment"
    val kafkaBroker = "kafka:9092"

    val topics : Set[String] = kafkaTopics.split(",").map(_.trim).toSet
    val kafkaParams = Map[String,Object](
      "bootstrap.servers" -> kafkaBroker,
              "group.id" -> "consumer-spark",
              "key.deserializer" -> classOf[StringDeserializer],
              "value.deserializer" -> classOf[StringDeserializer]
    )

    logger.info("Connecting to broker...")
    logger.info(s"kafkaParams: $kafkaParams")

    val tweetStream = KafkaUtils.createDirectStream[String, String](
      ssc,
      PreferConsistent,
      Subscribe[String, String](topics, kafkaParams))

Я не уверен, что я что-то упускаю.

Любая помощь будет высоко ценится!!

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
2
0
3 123
1

Ответы 1

Если вы новичок в Docker, я бы не рекомендовал использовать Kafka или Spark в качестве первых вещей, с которыми вы будете его пробовать. Кроме того, кажется, что вы только что скопировали пример wurstmeister, не прочитав README о его настройке... (что я могу сказать, потому что вам не нужно свойство build: ., потому что этот контейнер уже существует на DockerHub)

По сути, Kafka доступна только в пределах вашей сети Docker через эту конфигурацию.

KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092

Вам нужно будет отредактировать это, чтобы переадресация портов работала правильно из-за пределов сети Docker Compose по умолчанию, или вы также должны запустить свой код Spark в контейнере.

Если код Spark не находится в контейнере, то указать его на kafka:9092 вообще не получится.

Ссылка Слушатели Кафки объяснили

И много предыдущие вопросы с похожими проблемами (проблема не только в Spark)

Как я уже упоминал в начале своего поста, я запускаю приложение для потоковой передачи искры в другом контейнере. Мое приложение по-прежнему не может установить соединение с брокером. Дайте мне знать, если я что-то пропустил в конфигурации.

ISM 17.02.2019 23:54

Затем ваш контейнер Spark должен быть запущен из того же файла Docker-Compose, что и Kafka, или вы должны добавить параметр --net в команду docker run, используя ту же сеть, что и контейнер Kafka.

OneCricketeer 20.02.2019 23:45

Другие вопросы по теме