Heim  >  Artikel  >  Backend-Entwicklung  >  Echtzeit-Stream-Verarbeitung mit Kafka und Flink in Beego

Echtzeit-Stream-Verarbeitung mit Kafka und Flink in Beego

WBOY
WBOYOriginal
2023-06-22 16:18:331476Durchsuche

Mit dem Aufkommen des Big-Data-Zeitalters müssen wir häufig Echtzeitdaten verarbeiten und analysieren. Die Echtzeit-Stream-Verarbeitungstechnologie hat sich aufgrund ihrer hohen Leistung, hohen Skalierbarkeit und geringen Latenz zu einer gängigen Methode für die Verarbeitung großer Echtzeitdaten entwickelt. In der Echtzeit-Stream-Verarbeitungstechnologie sind Kafka und Flink gemeinsame Komponenten und werden in vielen Datenverarbeitungssystemen auf Unternehmensebene häufig verwendet. In diesem Artikel stellen wir vor, wie man Kafka und Flink in Beego für die Echtzeit-Stream-Verarbeitung verwendet.

1. Einführung in Kafka

Apache Kafka ist eine verteilte Stream-Verarbeitungsplattform. Es entkoppelt Daten in einen Stream (Streaming-Daten) und verteilt die Daten auf mehrere Knoten und bietet so hohe Leistung, hohe Verfügbarkeit, hohe Skalierbarkeit und einige erweiterte Funktionen, wie z. B. die Exactly-Once-Garantie. Die Hauptaufgabe von Kafka besteht darin, ein zuverlässiges Nachrichtensystem zu sein, mit dem Kommunikationsprobleme zwischen mehreren Komponenten in verteilten Systemen gelöst und Nachrichten zuverlässig übertragen werden können.

2. Einführung in Flink

Flink ist ein ereignisgesteuertes, verteiltes, leistungsstarkes Big-Data-Stream-Verarbeitungsframework. Es unterstützt Stream- und Batch-Verarbeitung, verfügt über SQL-ähnliche Abfrage- und Stream-Verarbeitungsfunktionen, unterstützt hochgradig zusammensetzbares Streaming-Computing und verfügt über umfangreiche Fenster- und Datenspeicherunterstützung.

3. Kafka in Beego

Die Verwendung von Kafka in Beego ist hauptsächlich in zwei Teile unterteilt, nämlich Kafka-Konsumer und Kafka-Produzent.

  1. Kafka Producer

Durch die Verwendung von Kafka Producer in Beego können Daten problemlos an den Kafka-Cluster gesendet werden. Hier ist ein Beispiel für die Verwendung von Kafka Producer in Beego:

import (
    "github.com/Shopify/sarama"
)

func main() {
    // 创建 kafka 生产者
    producer, err := sarama.NewSyncProducer([]string{"localhost:9092"}, nil)

    if err != nil {
        // 处理错误情况
        panic(err)
    }

    // 创建 Kafka 消息
    msg := &sarama.ProducerMessage{
        Topic: "test",
        Value: sarama.StringEncoder("Hello, World!"),
    }

    // 发送消息
    partition, offset, err := producer.SendMessage(msg)

    if err != nil {
        // 处理错误情况
        panic(err)
    }

    fmt.Printf("消息已发送到分区 %d 的偏移量 %d 中
", partition, offset)

    // 关闭 Kafka 生产者
    producer.Close()
}
  1. Kafka Consumer

Die Verwendung von Kafka Consumer in Beego kann Das Folgende ist ein Beispiel für die Verwendung von Kafka-Konsumenten in Beego:

import (
    "github.com/Shopify/sarama"
)

func main() {
    // 创建 kafka 消费者
    consumer, err := sarama.NewConsumer([]string{"localhost:9092"}, nil)

    if err != nil {
        // 处理错误情况
        panic(err)
    }

    // 订阅 Topic
    partitions, err := consumer.Partitions("test")

    if err != nil {
        // 处理错误情况
        panic(err)
    }

    for _, partition := range partitions {
        // 从分区的开头读取数据
        partitionConsumer, _ := consumer.ConsumePartition("test", partition, sarama.OffsetOldest)

        // 处理数据
        go func(partitionConsumer sarama.PartitionConsumer) {
            for {
                select {
                case msg := <-partitionConsumer.Messages():
                    // 处理消息
                    fmt.Printf("收到消息: %v", string(msg.Value))
                }
            }
        }(partitionConsumer)
    }

    // 关闭 Kafka 消费者
    defer consumer.Close()
}

4. Die Verwendung von Flink in Beego kann direkt über die Java-API von Flink erfolgen Der Prozess wird durch die Cgo-Interaktion zwischen Java und Go abgeschlossen. Unten sehen Sie ein einfaches Beispiel von Flink, bei dem die Häufigkeit jedes Socket-Textworts durch Echtzeit-Stream-Verarbeitung berechnet wird. In diesem Beispiel lesen wir den angegebenen Textdatenstrom in Flink ein, verwenden dann die Operatoren von Flink, um den Datenstrom zu bearbeiten, und geben die Ergebnisse schließlich an die Konsole aus.

Erstellen Sie eine Socket-Textdatenquelle
  1. import org.apache.flink.streaming.api.functions.source.SourceFunction;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.Socket;
    
    public class SocketTextStreamFunction implements SourceFunction<String> {
        private final String hostname;
        private final int port;
    
        public SocketTextStreamFunction(String hostname, int port) {
            this.hostname = hostname;
            this.port = port;
        }
    
        public void run(SourceContext<String> context) throws Exception {
            Socket socket = new Socket(hostname, port);
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                context.collect(line);
            }
            reader.close();
            socket.close();
        }
    
        public void cancel() {}
    }
Berechnen Sie die Häufigkeit jedes Wortes
  1. import org.apache.flink.streaming.api.datastream.DataStream;
    import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
    import org.apache.flink.streaming.api.functions.windowing.WindowFunction;
    import org.apache.flink.streaming.api.windowing.time.Time;
    import org.apache.flink.streaming.api.windowing.windows.TimeWindow;
    import org.apache.flink.util.Collector;
    
    public class SocketTextStreamWordCount {
        public static void main(String[] args) throws Exception {
            String hostname = "localhost";
            int port = 9999;
    
            final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    
            // 从 Socket 中读取数据流
            DataStream<String> text = env.addSource(new SocketTextStreamFunction(hostname, port));
    
            // 计算每个单词的出现频率
            DataStream<Tuple2<String, Integer>> wordCounts = text
                    .flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
                        public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {
                            String[] words = value.toLowerCase().split("\W+");
                            for (String word : words) {
                                out.collect(new Tuple2<String, Integer>(word, 1));
                            }
                        }
                    })
                    .keyBy(0)
                    .timeWindow(Time.seconds(5))
                    .apply(new WindowFunction<Tuple2<String, Integer>, Tuple2<String, Integer>, Tuple, TimeWindow>() {
                        public void apply(Tuple key, TimeWindow window, Iterable<Tuple2<String, Integer>> input, Collector<Tuple2<String, Integer>> out) throws Exception {
                            int sum = 0;
                            for (Tuple2<String, Integer> t : input) {
                                sum += t.f1;
                            }
                            out.collect(new Tuple2<String, Integer>((String) key.getField(0), sum));
                        }
                    });
    
            // 打印到控制台
            wordCounts.print();
    
            env.execute("Socket Text Stream Word Count");
        }
    }
  2. 5. Fazit

In diesem Artikel wird erläutert, wie Sie Kafka und Flink in Beego für die Echtzeit-Stream-Verarbeitung verwenden. Kafka kann als zuverlässiges Nachrichtensystem verwendet werden und kann zur Lösung von Kommunikationsproblemen zwischen mehreren Komponenten in verteilten Systemen und zur zuverlässigen Übertragung von Nachrichten verwendet werden. Flink ist ein ereignisgesteuertes, verteiltes, leistungsstarkes Framework zur Verarbeitung von Big-Data-Streams. In praktischen Anwendungen können wir uns je nach Bedarf flexibel für den Einsatz von Technologien wie Kafka und Flink entscheiden, um Herausforderungen bei der groß angelegten Echtzeit-Datenverarbeitung zu lösen.

Das obige ist der detaillierte Inhalt vonEchtzeit-Stream-Verarbeitung mit Kafka und Flink in Beego. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn