streaming在Hadoop中的应用


0

我正在研究这个Flink CEP的例子。我确实看到在这个例子中,他们创建了一个单独的应用程序(这是一种流式应用程序),该应用程序正在生成和使用数据并在数据上应用模式匹配。他们还没有在中间放一个 streaming层(如Kafka),到目前为止,单一的应用程序就足以满足这一目的,这使得它非常优化。现在,我知道如果我使用Kafka,那么我将需要两个应用程序;一个用于将数据摄取到Kafka topic中,另一个用于消费来自Kafka topic的数据。我有几个问题没有得到回答:

    为什么他们没有使用任何 streaming层(如 Kafka )在这

1 答案


0

让我逐一回答你的问题。

为什么在这个例子中他们没有使用任何 streaming层(比如Kafka)?

我想你对Flink的 streaming有误解。首先,Flink是流处理引擎。基本上,Flink正在处理的一切都是一个流。

大家都知道Flink可以在流模式或批处理模式下 job ,但是对于Flink批处理来说,它只是有限长度流的一个特例,而流通常是无限的。所以在 Flink,一切都是一连串的事件。所以问题是 Flink从哪里得到数据。

Flink可以从多个源读取数据,Kafka是Flink中可以使用的数据源之一。看看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);

实际上,您将从外部系统(如Kafka或Kinesis)读取事件数据,但为了显示CEP库的要点,该示例有意简化。

何时何地需要 streaming?

如果你所说的“流式处理”不是指批处理,那么可以安全地说,它应该在事件不断被接收并且需要接近实时处理时间的情况下使用。

如果您询问何时应该使用Kafka,那么您可以使用它来处理事件流、将其用作消息代理、用于日志聚合等等。下面是一个可以使用apachekafka的用例列表。

参考Flink CEP的例子,我想知道流层(如Kafka/Kinesis)将在何处以及如何发挥作用?

在实际应用程序中,您将使用Kafka/Kinesis数据源或从外部系统读取数据的其他数据源。

Kafka是现有消息代理(如RabbitMQ)的替代品,具有出色的性能特性,但您可以在Flink中使用其他数据源,甚至可以编写自己的数据源。


我来回答

写文章

提问题

面试题