使用 C# 體驗 Apache Kafka Streams

幾年前開始使用 Kafka 時,就有注意 Kafka Streams,但當時查資料發現 Kafka Streams 是 Java 的 library (僅支援 Java 與 Scala),並不支援 .NET,最近看技術文章時,看到有人提到使用 Kafka 來 streaming data,雖然內容跟 Apache Kafka Streams 有點不同,但讓我想起 Kafka Streams,於是再次查詢,發現有人寫了一個 .NET library - Streamiz.Kafka.Net,讓 .NET 開發者也能使用 Kafka Streams,於是決定來試試看。

基本環境說明

  • macOS Sonoma 14.5 (Apple M2 Pro)
  • OrbStack 1.6.3 (17138)
  • .NET SDK 8.0.101
  • JetBrains Rider 2024.1.4
  • NuGet packages
    • Streamiz.Kafka.Net 1.5.1
  • docker images

    • quay.io/strimzi/kafka:latest-kafka-3.7.1
    • provectuslabs/kafka-ui:v0.7.2
  • 建立 kafka

    • server.properties

      如果要從 docker compose 外部連接到 kafka,需要在 etc/hosts 加上 127.0.0.1 kafka

    • docker-compose

使用方式

  • 目的:將 from topic 的 message 加上 from: 的前綴後,放入 to topic

  • 程式碼

  • 效果

    • from topic

      from

    • to topic

      to

心得

  • 僅支援單一 kafka cluster

    3tips

  • 必填參數只有兩個:ApplicationIdBootstrapServers

以個人粗淺的看法,我覺得 Kafka Streams 就是將某個 topic 的內容取出來,進行處理後再放回另一個 topic,這樣的概念,事實上跟過去使用 producer 與 consumer 相比並沒有多大的差別,Kafka Streams 提供更高層次的抽象而將 producer 與 consumer 做了封裝

介紹文件:Streamiz.Kafka.Net 還有不少功能,初步看來應該可以符合不同的需求,未來有機會再深入研究

完整程式碼請參考 GitHub:yowko/kafka-streams-demo

參考資訊

  1. Apache Kafka Streams
  2. GitHub:LGouellec/kafka-streams-dotnet
  3. Streamiz.Kafka.Net
  4. GitHub:yowko/kafka-streams-demo