Поток данных Kafka Storm HDFS / S3


Неясно, можете ли вы сделать разветвление (дублирование) в Кафке, как вы можете в Flume.

Я бы хотел, чтобы Кафка сохранил данные в HDFS или S3 и отправил дубликат этих данных в Storm для обработки в реальном времени. Выходные данные грозовых агрегаций / анализа будут храниться в Кассандре. Я вижу, как некоторые реализации перетекают все данные из Кафки в шторм, а затем два выхода из шторма. Однако я хотел бы исключить зависимость Storm для хранения необработанных данных.

Это возможно? Знаете ли вы о какой-либо документации/примерах/реализациях, подобных этой?

Кроме того, есть ли у Кафки хорошая поддержка для хранения S3?

Я видел Camus для хранения в HDFS - вы просто запускаете эту работу через cron, чтобы постоянно загружать данные из Kafka в HDFS? Что произойдет, если второй экземпляр задания начнется до того, как завершится предыдущий? Наконец, будет ли Камю работать с S3?

Спасибо - я ценю это!

4 3

4 ответа:

Относительно Камю, Да, планировщик, который запускает задание, должен работать. То, что они используют в LinkedIn-это Азкабан, вы можете посмотреть на это тоже.

Если один запускает до того, как другой заканчивает, некоторое количество данных будет прочитано дважды. Так как второе задание начнет чтение с тех же смещений, что и первое.

Что касается Camus с S3, в настоящее время я не думаю, что это на месте.

Что касается поддержки Kafka для хранения S3, есть несколько потребителей Kafka S3, которые вы можете легко подключить, чтобы сохранить ваши данные в S3. kafka-s3-storage является одним из них.

Существует множество возможных способов накормить storm переведенными данными. Главный вопрос, который мне не ясен, это то, какую зависимость вы хотите устранить и какие задачи вы хотите удержать от выполнения шторма. Если считается допустимым, что storm получит xml или json, вы можете легко прочитать исходную очередь с помощью двух потребителей. Поскольку каждый потребитель контролирует сообщения, которые он читает, оба могут читать одни и те же сообщения. Один потребитель может вставить данные в ваше хранилище, а другой переведу информацию и отправлю ее штурму. Нет никакой реальной сложности с осуществимостью этого, но я считаю, что это не идеальное решение по следующим причинам:

  1. Ремонтопригодность-потребитель нуждается в надзоре. Поэтому вам нужно будет контролировать своих работающих потребителей. В зависимости от вашего развертывания и способа обработки типов данных, это может быть нетривиальной задачей. Особенно, когда у вас уже установлен storm и поэтому контролируемый.

  2. Storm connectiviy-вам еще нужно выяснить, как подключить эти данные к storm. У Srorm есть носик Кафки, который я использовал, и работает очень хорошо. Но, используя предложенную архитектуру,это означает дополнительную кафкианскую тему для размещения переведенных сообщений. Это не очень эффективно, поскольку носик может также считывать информацию непосредственно из исходной темы и переводить ее с помощью простого болта.

Предложенный способ справиться с этим был бы чтобы сформировать топологию, используйте Kafka spout для чтения необработанных данных и один болт для отправки необработанных данных в хранилище, а другой-для их перевода. Но это решение зависит от причин, по которым вы хотите держать storm подальше от бизнеса с необработанными данными.

Кафка фактически сохраняет события в течение настраиваемого периода времени-события не удаляются сразу после потребления, как другие системы сообщений или очередей. Это позволяет иметь несколько потребителей, которые могут читать из Кафки либо в начале (в соответствии с настраиваемым временем хранения), либо со смещения.

Для описанного случая использования вы бы использовали Camus для пакетной загрузки событий в hadoop и Storm для считывания событий с того же выхода Kafka . Просто убедитесь, что оба процесса прочитаны новые события до истечения настраиваемого времени хранения.

Что касается Камю, ggupta1612 ответил на этот аспект лучше всего

Планировщик, запускающий задание, должен работать. То, что они используют в LinkedIn-это Азкабан, вы можете посмотреть на это тоже.

Если один запускает до того, как другой заканчивает, некоторое количество данных будет прочитано дважды. Так как второе задание начнет чтение с тех же смещений, что и первое.