За последние несколько лет мы разработали довольно много приложений Spark Streaming (Direct API), которые читают или пишут в / из Kafka, IBM MQ, Hive, HBase, HDFS и другие на нашей платформе Cloudera. Теперь, когда Direct API Spark Streaming (в настоящее время у нас версия 2.3.2) устарела, и мы недавно добавили платформу Confluent (поставляется с Kafka 2.2.0) в наш проект, мы планируем перенести эти приложения.
Что является естественной заменой наших приложений Spark Streaming? Должны ли мы перейти на Spark Structured Streaming или, скорее, на Kafka Streams?
У меня лично нет опыта работы с обеими платформами, но, на мой взгляд, Spark Structured Streaming кажется естественным выбором. Наша кодовая база в основном написана на Scala, что также может быть использовано для структурированного API. Kafka Streams имеет несколько ограничений с Scala. Хотя мы можем потерять некоторую гибкость, оставив низкоуровневый API RDD и перейдя на более высокий уровень DataFrames, мы могли бы опираться на наши знания в Spark.
С другой стороны, есть Kafka Streams, который, вероятно, является лучшим выбор, когда речь идет об обработке данных между темами Kafka, что является нашим основным вариантом использования. И, глядя на все коннекторы Kafka, которые поставляются с Confluent, можно использовать и другие варианты использования.