0

Я пытаюсь изучить пример this Flink CEP. Я вижу, что в этом примере они создали одно приложение (которое является своего рода потоковым приложением), которое производит &, потребляя данные &, применяя сопоставление шаблонов по данным. Они не вставили потоковый слой между ними (например, Kafka). До сих пор одного приложения достаточно для этой цели, что делает его очень оптимизированным. Теперь я знаю, что если я буду использовать Kafka, тогда мне потребуются 2 приложения; один для глотания данных в Кафки тему & другой для потребления данных от Кафки topic..I есть несколько вопросов, которые я не найдётся ответ ::Использование потоковой передачи в Hadoop

  1. Почему они не используют любой потоковый слой (например, Кафка) в этом пример ??

  2. Когда & где требуется потоковая передача?

  3. Ссылаясь на пример Flink КЭП, я хочу знать, где & как потокового слой (например, Кафка/Kinesis) вступает в игру ??

  4. Каковы будут преимущества/недостатки, если потоковый слой, например, Kafka/Kinesis) находится между ними?

+0

Kafka представляет собой очередь сообщений, это может быть источник/приемник сообщений для потоковой технологии, такой как Flink, но Flink выполняет обработку потока. –

+0

Я хочу знать, когда следует делать потоковое вещание? Когда потоковая передача действительно не требуется ??? – Akki

ответ

1

Позвольте мне ответить на ваши вопросы один за другим.

Почему они не используют любой потоковый слой (как Кафка) в этом примере?

Я думаю, что у вас есть неправильное представление о потоковом в Флинка. Прежде всего, Flink - это механизм обработки потоков. В основном все, что Флинк обрабатывает, - это поток.

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

Flink может считывать данные из нескольких источников, а Kafka является одним из источников, которые могут использоваться во Flink. Взгляните на папку this и this в хранилище Flink. Они содержат инструменты различных источников в Flink, включая Kafka, Kinesis, RabbitMQ и т. Д. С точки зрения Flink не имеет значения, поступают ли данные из внешней системы, считывается из файла или создается.

Пользователь Flink может реализовать свой источник данных, который будет использоваться во время выполнения Flink. Для этого нужно расширить класс RichSourceFunction и реализовать метод run.Например, этот источник данных будет генерировать бесконечный поток чисел, начиная с 0:

public class DummySource extends RichParallelSourceFunction<Integer> { 
    public void run(SourceContext<Integer> sourceContext) throws Exception { 
    // You can specify custom termination conditions 
    // the source should not be inifite 
    int i = 0; 
    while (true) { 
     // provide an event for Flink processing 
     sourceContext.collect(i); 
     i++; 
    } 
    } 
} 

Поскольку это не имеет значения, какой источник данных для использования автора учебника решил упростить пример и использовать простой источник данных, генерирует данные, используя генератор случайных чисел:

MonitoringEvent monitoringEvent; 

int rackId = random.nextInt(shard) + offset; 
if (random.nextDouble() >= temperatureRatio) { 
    double power = random.nextGaussian() * powerStd + powerMean; 
    monitoringEvent = new PowerEvent(rackId, power); 
} else { 
    double temperature = random.nextGaussian() * temperatureStd + temperatureMean; 
    monitoringEvent = new TemperatureEvent(rackId, temperature); 
} 

sourceContext.collect(monitoringEvent); 

в то время как в действительности вы бы считывать данные события из внешней системы, как Кафка или Kinesis на примере намеренно упрощенным, чтобы показать суть библиотеки КЭП.

Когда & где требуется потоковая?

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

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

Ссылаясь на пример Flink КЭП, я хочу знать, где & как потоковое слой (например, Кафка/Kinesis) вступит в игру?

Каковы будут преимущества/недостатки, если промежуточный поток, например Kafka/Kinesis)?

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

Kafka является альтернативой существующим брокерам сообщений, таким как RabbitMQ, и имеет отличные рабочие характеристики, но вы можете использовать другие источники данных в Flink или даже написать свои собственные.