Apache Flink - Conceitos de API

Flink tem um rico conjunto de APIs que usam os desenvolvedores para realizar transformações em dados em lote e em tempo real. Uma variedade de transformações inclui mapeamento, filtragem, classificação, junção, agrupamento e agregação. Essas transformações por Apache Flink são realizadas em dados distribuídos. Vamos discutir as diferentes APIs que o Apache Flink oferece.

API Dataset

A API do conjunto de dados no Apache Flink é usada para realizar operações em lote nos dados durante um período. Esta API pode ser usada em Java, Scala e Python. Ele pode aplicar diferentes tipos de transformações nos conjuntos de dados, como filtragem, mapeamento, agregação, junção e agrupamento.

Os conjuntos de dados são criados a partir de fontes como arquivos locais ou pela leitura de um arquivo de um determinado curso e os dados do resultado podem ser gravados em diferentes coletores, como arquivos distribuídos ou terminal de linha de comando. Esta API é compatível com as linguagens de programação Java e Scala.

Aqui está um programa Wordcount da API Dataset -

public class WordCountProg {
   public static void main(String[] args) throws Exception {
      final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

      DataSet<String> text = env.fromElements(
      "Hello",
      "My Dataset API Flink Program");

      DataSet<Tuple2<String, Integer>> wordCounts = text
      .flatMap(new LineSplitter())
      .groupBy(0)
      .sum(1);

      wordCounts.print();
   }

   public static class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
      @Override
      public void flatMap(String line, Collector<Tuple2<String, Integer>> out) {
         for (String word : line.split(" ")) {
            out.collect(new Tuple2<String, Integer>(word, 1));
         }
      }
   }
}

API DataStream

Esta API é usada para lidar com dados em fluxo contínuo. Você pode realizar várias operações, como filtragem, mapeamento, janelamento, agregação de dados de fluxo. Existem várias fontes neste fluxo de dados, como filas de mensagens, arquivos, fluxos de soquete e os dados de resultado podem ser gravados em diferentes coletores, como terminal de linha de comando. As linguagens de programação Java e Scala oferecem suporte a essa API.

Aqui está um programa de streaming de Wordcount da API DataStream, onde você tem um fluxo contínuo de contagens de palavras e os dados são agrupados na segunda janela.

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.util.Collector;
public class WindowWordCountProg {
   public static void main(String[] args) throws Exception {
      StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
      DataStream<Tuple2<String, Integer>> dataStream = env
      .socketTextStream("localhost", 9999)
      .flatMap(new Splitter())
      .keyBy(0)
      .timeWindow(Time.seconds(5))
      .sum(1);
      dataStream.print();
      env.execute("Streaming WordCount Example");
   }
   public static class Splitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
      @Override
      public void flatMap(String sentence, Collector<Tuple2<String, Integer>> out) throws Exception {
         for (String word: sentence.split(" ")) {
            out.collect(new Tuple2<String, Integer>(word, 1));
         }
      }
   }
}