Simple Sistem Logging Terdistribusi Mengunakan Go dan Kafka

Subscribe Dengan Account Google Untuk Membaca Artikel Tanpa Iklan !
Simple Sistem Logging Terdistribusi Mengunakan Go dan Kafka
The Psychology of Money Edisi Revisi

The Psychology of Money Edisi Revisi

Seorang genius yang kehilangan kendali atas emosinya bisa mengalami bencana keuangan. Sebaliknya, orang biasa tanpa pendidikan finansial bisa kaya jika mereka punya sejumlah keahlian terkait perilaku yang tak berhubungan dengan ukuran kecerdasan formal.

Free Klik Disini !

Ide Aplikasi System Loging Terdistribusi


 

  • Setiap layanan dalam sistem kita akan mengirimkan log ke topik Kafka yang sama.

  • Kita bisa memiliki consumer yang berbeda untuk:

    • Menampilkan log secara real-time di dashboard.

    • Mengumpulkan log untuk analisis lebih lanjut (misalnya, menggunakan Elasticsearch).

    • Mengirimkan notifikasi jika terjadi error tertentu.




Contoh Implementasi Golang


1) Producer, untuk mempublish data ke kafka topic.

package main

import (
"fmt"
"log"

"github.com/confluentinc/confluent-kafka-go/kafka"
)

func main() {
// Konfigurasi producer
config := &kafka.ConfigMap{
"bootstrap.servers": "localhost:9092",
}

// Buat producer
producer, err := kafka.NewProducer(config)
if err != nil {
log.Fatalf("Failed to create producer: %s", err)
}
defer producer.Close()

// Topic yang akan digunakan
topic := "my-logs"

// Pesan yang akan dikirim
message := &kafka.Message{
Value: []byte("Hello from Golang!"),
}

// Kirim pesan
err = producer.Produce(message, nil)
if err != nil {
log.Printf("Failed to produce message: %v", err)
} else {
fmt.Printf("Produced message to topic %s\n", topic)
}
}

2) Consumer, untuk meng-konsumsi pesan dari topic kafka.

package main

import (
"fmt"
"log"

"github.com/confluentinc/confluent-kafka-go/kafka"
)

func main() {
// Konfigurasi consumer
config := &kafka.ConfigMap{
"bootstrap.servers": "localhost:9092",
"group.id": "my-group",
"auto.offset.reset": "earliest",
}

// Buat consumer
c, err := kafka.NewConsumer(config)
if err != nil {
log.Fatalf("Failed to create consumer: %s", err)
}
defer c.Close()

// Subscrib ke topic
err = c.Subscribe([]string{"my-logs"}, nil)
if err != nil {
log.Fatalf("Failed to subscribe: %s", err)
}

for {
msg, err := c.ReadMessage(100)
if err == nil {
fmt.Printf("Message on %s: %s\n", msg.TopicPartition, string(msg.Value))
} else {
// Handle errors
}
}
}

Penjelasan Singkat



  • Producer: Membuat pesan dan mengirimkannya ke topik yang ditentukan.

  • Consumer: Membaca pesan dari topik yang telah disubscribe.

  • Konfigurasi: Mengatur parameter seperti alamat broker, group ID, dan offset.

  • Topic: Saluran untuk mengirim dan menerima pesan.


Ide Pengembangan Lebih Lanjut



  • Schema Registry: Menggunakan schema registry untuk mendefinisikan struktur data pesan.

  • KStream: Menggunakan KStream untuk melakukan pemrosesan data secara streaming.

  • KTable: Menggunakan KTable untuk menyimpan data secara stateful.

  • Kafka Connect: Menggunakan Kafka Connect untuk menghubungkan Kafka dengan sistem lain (misalnya, database).


Catatan Penting



  • Instalasi: Pastikan Kafka dan librari Golang untuk Kafka sudah terinstal.

  • Konfigurasi: Sesuaikan konfigurasi dengan environment project Anda.

  • Error Handling: Tambahkan penanganan error yang lebih baik.

  • Best Practices: Ikuti best practices untuk penggunaan Kafka.


Baca artikel lainya :