Статья для понимания архитектурного дизайна Flume

Apache Flume

Это 9-й день моего участия в августовском испытании обновлений.Подробности о мероприятии:Испытание августовского обновления

текст

  • Ядром Flume является сбор данных из источника данных и отправка их в пункт назначения. Чтобы обеспечить успешную доставку, данные будут кэшироваться перед отправкой в ​​место назначения, а кэшированные данные будут удалены после того, как данные действительно достигнут места назначения.

  • Основная роль в распределенной системе Flume —agent, система сбора лотка формируется из связующих агентов один за другим.

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

Пользователи могут объединять любое количество агентов для формирования конвейера данных в соответствии со своими потребностями.

Flume относится к данным, передаваемым в конвейере данных, какEvent, каждое событие состоит из заголовка и массива байтов (содержимое данных).

Среди них заголовок состоит из ряда пар ключ/значение, которые можно использовать для маршрутизации данных, а массив байтов инкапсулирует фактическое содержимое передаваемых данных.

Обычно сериализуется с использованием таких объектов, как Avro, Thrift, Protobuf и т. д.

События в Flume могут генерироваться специальными клиентскими программами, которые инкапсулируют данные для отправки в объекты Event и вызывают SDK, предоставленный Flume, для отправки их Агенту.

Далее мы сосредоточимся на внутренних компонентах Агента, как показано на рисунке.

在这里插入图片描述

Агент в основном состоит из трех компонентов, а именно источника, канала и приемника, функции и функции которых заключаются в следующем.

1 . Source

Компонент сбора данных используется для взаимодействия с источником данных для получения данных.

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

Для удобства пользователей Flume предоставляет множество реализаций Source, в том числе:

Avro Source

Встроенный AvroServer, который может получать данные, отправленные клиентом Avro, и записывать их в канал.

Thrift Source

Встроенный ThriftServer, который может получать данные, отправленные клиентом Thrift, и записывать в канал.

Exec Source

Выполнить указанную оболочку и получить данные из стандартного вывода команды, записать в канал как команду «tail -F filename»,

ExecSource может реализовать сбор данных в режиме реального времени, но, учитывая, что когда агент Flume не запускается или выполнение команды завершается сбоем, данные журнала не могут быть собраны, а целостность данных журнала не может быть гарантирована, поэтому он редко используется в реальная производственная среда.

Spooling Directory Source

Источник может отслеживать изменения файлов в указанном пуле каталогов.Как только новый файл будет найден, он будет записан в Канал.При использовании Источника необходимо обратить внимание на два момента:

Файлы, скопированные в каталог мониторинга, не могут быть изменены, каталог не может содержать подкаталоги.

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

Из-за хорошей надежности и стабильности этого источника он был принят многими компаниями.

Kafka Source

Встроенный потребитель Kafka, который может считывать данные темы из Kafka Broker и записывать в канал.

Syslog Source

Он делится на два типа: источник Syslog TCP и источник Syslog UDP, которые могут соответственно получать данные, отправленные по протоколам TCP и UDP, и записывать в канал.

HTTP Source

Он может получать данные, отправленные по протоколу HTTP, и записывать их в канал. Конечно, пользователи также могут настраивать источник в соответствии со своими потребностями.

Как выбрать источник Flume?

В реальной производственной среде есть два источника данных, один из которых представляет собой файл, который может быть собран с помощью ExecSource или Spooling Directory Source, но, учитывая, что первый не может гарантировать целостность данных, а второй имеет низкую производительность в режиме реального времени, обычно настраиваемый сам по себе Он не только обеспечивает целостность, но и имеет высокую производительность в реальном времени.

taildirsourceЭто очень хорошее решение, которое может отслеживать изменения файлов в каталоге в режиме реального времени, считывать новые данные в режиме реального времени и записывать точки останова, чтобы гарантировать, что данные не будут потеряны или повторно переданы после перезапуска Агента;

Другой - сетевые данные.В этом случае вы можете использовать источник Avro / Thrift и написать свою собственную клиентскую программу для передачи данных в источник.

2. Channel

Компонент транспортного канала, данные кэша, используемые для передачи данных от источника к приемнику.

Канал — это буфер, в котором временно хранится событие, записанное источником, до тех пор, пока оно не будет отправлено приемником.

В настоящее время Fume в основном предоставляет следующие реализации канала.

Memory Channel

Кэшировать события в очереди в памяти.

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

File Channel

Кэшировать события в файле на диске.

Этот канал компенсирует отсутствие канала памяти, но производительность несколько снизится.

JDBC Channel

Поддержка драйвера JDBC, который может записывать события в базу данных.

Этот канал подходит для сценариев с очень высокими требованиями к восстановлению после отказа.

Kafka Channel

Кэширование событий в Kafka.

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

3. Sink

Компонент-приемник, данные отправляются в конечную систему хранения или агенту следующего уровня.

Приемник отвечает за чтение данных из Канала и отправку их следующему Агенту (Источнику).

Flume в основном предоставляет следующие реализации Sink:

HDFS Sink

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

HBase Sink

Данные в канале могут быть записаны в HBase, который поддерживает как синхронные, так и асинхронные методы записи.

Avro / Thrift Sink

Встроенный клиент Avro / Thrift, который может отправлять данные о событиях на указанный сервер Avro / Thrift через Avro / Thrift RPC.

MorphlineSolr Sink / ElasticSearch Sink

Запишите данные события в канале в поисковую систему Solr/ElasticSearch. В некоторых сценариях пользователям необходимо одновременно выполнять автономный анализ и онлайн-поиск данных. Они могут использовать приемник HDFS и приемник для записи данных в HDFS и поисковая система одновременно.

Kafka Sink

Запишите данные в Канал в Кафку.

FLULE использует транзакционный подход для обеспечения надежности доставки событий.

Приемник может удалить Событие из Канала только после того, как Событие будет сохранено в Канале или после того, как оно будет успешно передано следующему Агенту.

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

Структурная схема системы сбора данных

простая структура

  • Один агент собирает данные

在这里插入图片描述

сложная структура

  • 2 агента в сериале

在这里插入图片描述

  • Несколько агентов в серии

在这里插入图片描述

  • несколько каналов

在这里插入图片描述

Категории