резюме
Apache Flume — это распределенная, надежная и доступная система для эффективного сбора, объединения и перемещения больших объемов данных журналов из множества разрозненных источников в централизованное хранилище данных.
Использование Flume не ограничивается данными журнала. Поскольку источник данных может быть настроен, Flume можно использовать для передачи большого количества данных о событиях, которые включают не только данные сетевого взаимодействия, данные, созданные в социальных сетях, сообщения электронной почты и т. д.
Apache Flume — это проект верхнего уровня Apache Foundation, разработанный и поддерживаемый Cloudera до присоединения к Apache. В настоящее время Apache Flume имеет две основные версии: 0.9.x и 1.x. Среди них 0.9.x — историческая версия, которую мы называем Flume OG (исходное поколение). 22 октября 2011 г. Cloudera завершила Flume-728 и внесла важные изменения в Flume: рефакторинг основных компонентов, основной конфигурации и архитектуры кода.Рефакторинговые версии вместе называются Flume NG (следующее поколение), то есть Here is the 1. .x версия.
Эта статья в основном знакомит с ролью и основными понятиями Flume.Благодаря этой статье читатели могут получить общее представление о сценариях использования, основных компонентах и механизме работы каждого компонента Flume. В другой статье мы подробно объясним, как настроить Flume для различных сценариев.
Архитектура
модель потока данных
Событие Flume определяется как единица потока данных. Агент Flume на самом деле представляет собой процесс JVM, который содержит различные компоненты, необходимые для выполнения задачи.Три основных компонента: Source, Chanel и Slink.
SourceПотребляйте события, переданные ему внешними источниками, такими как веб-серверы. Внешние источники отправляют данные в Flume в формате, определяемом целевым источником Flume. Например, источник Avro Flume может получать события Avro от клиентов Avro (Avro — высокопроизводительное промежуточное ПО, основанное на передаче двоичных данных, подпроект Hadoop), а также может получать события Avro от других агентов Flume (агенты Flume есть авро стоки) Прием авро ивентов. Точно так же мы можем определить источник Thrift Flume для получения событий от Thrift Sink, клиента Flume Thrift RPC или любого другого клиента (клиент может быть написан на любом языке, если он соответствует протоколу бережливости Flume).
channelЕго можно понимать как буферную область, которая используется для сохранения данных, полученных из источника, до тех пор, пока Flume slink не использует данные. Например, файловый канал хранит данные в файловой системе (конечно, вы можете поместить данные в память).
slinkПосле получения данных из канала данные удаляются из канала, а затем данные помещаются во внешнюю систему хранения, такую как HDFS (с использованием приемника Flume HDFS), или отправляются в источник других агентов Flume. И Source, и Slink отправляют и потребляют данные асинхронно.
сложное течение
Flume позволяет пользователям создавать сложные потоки данных, такие как поток данных через несколько агентов и, наконец, посадка. Он также допускает разветвление входных и выходных потоков, контекстную маршрутизацию и резервные маршруты (отказоустойчивость) для неудачных прыжков.
надежность
События сохраняются в канале каждого агента. Затем эти события отправляются следующему агенту в потоке или в хранилище устройства (например, HDFS). Текущий канал очистит событие только в том случае, если оно уже было сохранено в канале следующего агента или в памяти устройства. Этот механизм обеспечивает надежность потока при сквозной передаче.
Flume использует транзакционный подход для обеспечения надежной доставки событий. В источниках и slink хранение и восстановление событий инкапсулируются в виде транзакций, а события хранятся в каналах и извлекаются из каналов в виде транзакций. Это обеспечивает надежную передачу событий в потоке между узлами.
возмещаемый
События происходят в канале, который отвечает за гарантированное восстановление событий после сбоев. Flume поддерживает постоянный файловый (файловый режим: channel.type = "file") канал, поддерживаемый локальной файловой системой. Он также поддерживает режим памяти (channel.type="memory"), в котором события сохраняются в очереди памяти. Очевидно, что режим памяти будет работать лучше, чем файловая модель, но когда процесс агента, к сожалению, зависнет, события, хранящиеся в канале в режиме памяти, будут потеряны и не могут быть восстановлены.
Построить
создать агента
Конфигурация агента Flume хранится в локальном файле конфигурации. Это текст, свойства которого могут быть непосредственно и удобно прочитаны Java-программами. Конфигурации для одного или нескольких агентов могут быть указаны в одном и том же файле конфигурации. Файл конфигурации определяет свойства каждого источника, канала и slink в agnet, а также способ их объединения для формирования потока данных.
Настройка отдельных компонентов
Каждый компонент в потоке (источник, канал, slink) имеет свое имя, тип и набор свойств конфигурации. Например, источник Avro должен быть настроен с именем хоста (или IP-адресом) и номером порта для получения данных. Канал в памяти может иметь свойство максимальной длины очереди («емкость»: максимальное количество событий, которое может хранить канал). Ссылка HDFS должна знать URL-адрес файловой системы (hdfs://****), путь к файлу и скорость отката файла («hdfs.rollInterval»: сколько секунд нужно откатить файл нулевого часа в Окончательный файл сохраняется в HDFS). Все эти свойства отдельных компонентов необходимо указать в файле конфигурации.
объединить части
Агент должен знать, какие компоненты загружать и как комбинировать эти компоненты для формирования потока данных. Flume указывает имя каждого компонента (источник, канал, slink) и явно сообщает нам, к каким источникам и slinks подключен канал, чтобы компоненты можно было комбинировать. Например, источник под названием «avroWeb» передает события в приемник HDFS через канал, называемый «файловый канал». Файл конфигурации должен содержать имена и комбинации этих компонентов.
запустить агента
Мы можем запустить агент через файл сценария (flume-ng) в каталоге Flume bin. После команды нужно указать имя агента, конфигурационный файл:
$ bin/flume-ng agent -n $agent_name -c conf -f conf/flume-conf.properties.template
Выполнив приведенную выше команду, агент запустит компонент, как описано в файле конфигурации.
простой пример
Здесь мы приводим пример файла конфигурации, в котором настраивается одноузловое развертывание flume.
# example.conf: A single-node Flume configuration
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# Describe the sink
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
Глядя на этот файл конфигурации, мы видим, что имя этого агента — a1. Источник агента прослушивает порт 44444. Канал принимает режим памяти, а слинк выводит данные прямо в консоль (логгер). Файлы конфигурации определяют имена отдельных компонентов и описывают их типы и другие свойства. Конечно, файл конфигурации может настроить несколько свойств агента.Когда мы хотим запустить указанный процесс агента, нам нужно указать имя агента, отображаемое в командной строке:
$ bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console
Обратите внимание, что в реальных развертываниях мы обычно включаем параметр: --conf-file= . каталог будет содержать сценарий оболочкиflume-env.shи файл свойств log4j. В этом примере мы передаем параметр Java, чтобы заставить Flume выводить журналы на консоль.
В следующем примере мы можем удаленно подключиться через telnet к порту 44444, чтобы отправить данные агенту:
$ telnet localhost 44444
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
Hello world! <ENTER>
OK
Консоль процесса агента распечатает данные, отправленные через telnet:
12/06/19 15:32:19 INFO source.NetcatSource: Source starting
12/06/19 15:32:19 INFO source.NetcatSource: Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/127.0.0.1:44444]
12/06/19 15:32:34 INFO sink.LoggerSink: Event: { headers:{} body: 48 65 6C 6C 6F 20 77 6F 72 6C 64 21 0D Hello world!. }
После завершения этого шага поздравляем вас с успешной настройкой и развертыванием агента Flume.
Прием данных
Flume поддерживает множество механизмов получения данных из внешних источников.
RPC
Клиент Avro может отправлять указанные файлы в источник, используя механизм rpc:
$ bin/flume-ng avro-client -H localhost -p 41414 -F /usr/logs/log.10
Приведенная выше команда отправит /usr/logs/log.10 источнику, прослушивающему порт 41414.
Сетевые потоки
Flume поддерживает чтение данных из некоторых популярных потоков журналов, таких как:
- Avro
- Thrift
- Syslog
- Netcat
Настройка многоагентного потока
Для этого Flume поддерживает объединение нескольких агентов в цепочку.Укрепление
Когда нам нужно собрать информацию журнала со многих хостов, мы можем развернуть агент на каждом хосте, и slinks этих хостов подключаются к источнику конечного хоста регистрации журнала. Целевой хост объединяет все данные и приземляется на HDFS.
Отсканируйте код, чтобы подписаться на общедоступную учетную запись WeChat «Kooola Big Data», пообщаться о жизни | пообщаться о технологиях