дизайн- Может ли Кафка продюсер написан как Spark-job? - PullRequest
0 голосов
/ 17 мая 2019

У меня есть вопросы, связанные с дизайном 1) Ниже мой конвейер: Source-webservices ---> Kafka Producer -> themes -> sparkJobs -> hdfs / hive.

Мне нужно вытащитьданные из DataSourceAPI (URL-адреса веб-служб) и переходите к темам.Если я использую производителя Kafka, то может ли производитель Kafka быть написан как часть spark -job или это должно быть автономное Java-приложение?можно ли написать производителя кафки как искорку работы?если да, то как?

2) У меня разные виды данных, приходящие по разным темам.Но некоторые данные зависят от других данных из других тем. Поэтому мне нужно упорядочить данные.Например, данные topic_3 не могут быть обработаны, если не доступны данные topic_1 topic_2.Как справиться с такого рода зависимостями?

Как лучше всего оформить заказ?@ Kafka Сторона производителя или @ Сторона потребителя?

Ответы [ 2 ]

2 голосов
/ 17 мая 2019

Spark предоставляет соединитель для Kafka, через который вы можете подключиться к любой теме kafka, доступной в вашем кластере.Как только вы подключитесь к своей теме Kafka, вы можете читать или записывать данные.

Пример кода:

stream

val kafkaStream = spark
      .readStream
      .format("kafka")
      .option("kafka.bootstrap.servers", KAFKA_BROKERS)
      .option("subscribe", src_topic_name)
      .option("startingOffsets", "latest")
      .option("failOnDataLoss", "false")
      .load()

batch

val kafkaStream = spark
          .read
          .format("kafka")
          .option("kafka.bootstrap.servers", KAFKA_BROKERS)
          .option("subscribe", src_topic_name)
          .option("startingOffsets", "latest")
          .option("failOnDataLoss", "false")
          .load()

Теперь с помощью kafkaStream вы можете читать данные из src_topic_name(мы используем readStream здесь)

Ссылка: Потоковая передача Spark с Kafka

Этот блог может быть полезен для вас

1 голос
/ 17 мая 2019

1) Я не уверен в вашем трубопроводе. Ваш вопрос предполагает противоположное течение, то есть из набора данных в Кафку.

Конечно, производитель кафки может использоваться внутри вашей Spark DAG. Есть несколько вариантов. Я понимаю, что вы имели в виду Dataset API, а не DataSource API. В наборе данных вы всегда можете добавить конечный узел с 'foreach' и затем выдать каждый элемент. Вы также можете быть немного более эффективным и создать терминальный узел с помощью foreachPartition, где вы будете повторно использовать один и тот же источник для каждого элемента в данном подмножестве.

2) В Kafka строгий порядок гарантирован в пределах одного тематического раздела. Поэтому, если вам нужно сохранить порядок данных другого типа, вам необходимо отправить их в одну и ту же тему / раздел (мультиплексировать их) и убедиться, что ваш потребитель данных способен демультиплексировать этот гетерогенный поток. Чтобы сохранить ваши данные в одном и том же тематическом разделе, либо используйте один и тот же ключ сообщения и используйте разделитель по умолчанию (рекомендуется), либо укажите свой собственный.

...