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

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

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

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

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

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

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


person Roy    schedule 22.06.2013    source источник


Ответы (4)


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

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

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

person ggupta1612    schedule 10.07.2013

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

person seedhead    schedule 22.06.2013
comment
Я видел их — конкретно этот не обновлялся 11 месяцев. Он только что достиг стабильного состояния? Вы сами используете его в производственной среде? Спасибо! - person Roy; 23.06.2013

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

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

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

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

person erankl    schedule 23.06.2013

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

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

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

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

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

person Roy    schedule 27.09.2013