Потоковая обработка лучше пакетной обработки для свертывания / агрегирования временных рядов?

#apache-spark #apache-kafka #stream #batch-processing #apache-kafka-streams

#apache-spark #apache-kafka #поток #пакетная обработка #apache-kafka-streams

Вопрос:

Предыстория —

Данные временных рядов поступают в Apache Kafka, которые я храню в Cassandra. Поскольку необработанные данные требуют большого объема памяти, я пытаюсь агрегировать данные и создавать ежечасные, ежедневные, ежемесячные сводки для отчетности. Я могу придумать два подхода:

  1. Потоковая обработка: Используйте Kafka Streams API для свертывания данных и приема свернутых данных в Cassandra.
  2. Пакетная обработка: загружает необработанные данные в Cassandra, а также поддерживает индекс вновь введенных ключей. Запустите планировщик для извлечения ключей из индексной таблицы, которые были недавно введены с момента последнего запуска, извлеките временные ряды из Cassandra, сверните и сохраните в почасовых, ежедневных таблицах.

Какой метод, по вашему мнению, лучше и почему?

Я попробовал метод пакетной обработки. Это позволяет мне догонять данные, даже если мой сводный ряд не работает в течение некоторого времени. НО я думаю, что это тратит впустую много ресурсов, чтобы обеспечить мне надежность.

Я ожидаю, что свертка будет выполнена без использования слишком большого количества ресурсов.

Ответ №1:

Оба решения будут осуществимы. Поскольку у меня мало опыта работы с Cassandra, я упомяну только о возможностях решения этой проблемы с потоками Kafka:

На этой странице приведены некоторые расширенные примеры:

Комментарии:

1. Стоит отметить, что выполненные потоковые агрегации могут быть записаны обратно в раздел Kafka, а оттуда транслироваться с помощью Kafka Connect на Cassandra (или в любом другом месте, где они необходимы). Вы также можете использовать KSQL вместо потоков Kafka.