terraform > docker > kafka to mongodb

İbrahim Yıldız
2 min readNov 1, 2024

Kafka ve MongoDB Entegrasyonu: Terraform ile Docker Üzerinden Mesaj Gönderme ve Okuma

Giriş

Bu yazıda, Terraform kullanarak Docker üzerinde Apache Kafka ve MongoDB’yi kurup, Kafka’ya mesaj gönderip bu mesajları MongoDB’ye yazmayı ve ardından MongoDB’den okuma işlemlerini gerçekleştireceğiz.

Gerekli Araçlar

• Terraform

• Docker

• Python

• Kafka ve MongoDB istemcileri

1. Ortamın Kurulumu

Öncelikle, Kafka, Zookeeper ve MongoDB konteynerlerini oluşturmak için bir Terraform dosyası oluşturalım. Aşağıdaki main.tf dosyasını oluşturun:

terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 2.0"
}
}
}

provider "docker" {}

# Kafka ve Zookeeper için özel bir ağ oluşturma
resource "docker_network" "kafka_net" {
name = "kafka-net"
}

# Zookeeper Docker imajını tanımlama
resource "docker_image" "zookeeper" {
name = "bitnami/zookeeper:latest"
}

# Kafka Docker imajını tanımlama
resource "docker_image" "kafka" {
name = "wurstmeister/kafka"
}

# MongoDB Docker imajını tanımlama
resource "docker_image" "mongodb" {
name = "mongo:latest"
}

# Zookeeper konteyneri oluşturma
resource "docker_container" "zookeeper" {
name = "zookeeper"
image = docker_image.zookeeper.name
ports {
internal = 2181
external = 2181
}
env = ["ALLOW_ANONYMOUS_LOGIN=yes"]
networks_advanced {
name = docker_network.kafka_net.name
}
}

# Kafka konteyneri oluşturma
resource "docker_container" "kafka" {
name = "kafka"
image = docker_image.kafka.name
ports {
internal = 9092
external = 9092
}
env = [
"KAFKA_ADVERTISED_LISTENERS=INSIDE://kafka:9092,OUTSIDE://localhost:9093",
"KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT",
"KAFKA_LISTENERS=INSIDE://0.0.0.0:9092,OUTSIDE://0.0.0.0:9093",
"KAFKA_INTER_BROKER_LISTENER_NAME=INSIDE",
"KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181",
"KAFKA_CREATE_TOPICS=example-topic:1:1"
]
depends_on = [docker_container.zookeeper]
networks_advanced {
name = docker_network.kafka_net.name
}
}

# MongoDB konteyneri oluşturma
resource "docker_container" "mongodb" {
name = "mongodb"
image = docker_image.mongodb.name
ports {
internal = 27017
external = 27017
}
networks_advanced {
name = docker_network.kafka_net.name
}
}

2. Terraform ile Konteynerleri Başlatma

Terraform dosyasını kaydettikten sonra, konteynerleri başlatmak için aşağıdaki komutları çalıştırın:

terraform init
terraform apply

3. Mesaj Gönderme

Kafka’ya Docker komutları kullanarak mesaj göndermek için aşağıdaki komutu çalıştırın:

docker exec -it kafka kafka-console-producer.sh --broker-list localhost:9092 --topic example-topic

Hello, MongoDB!

Bu kod, Kafka’ya “Hello, MongoDB!” mesajını gönderir.

4. Kafka’dan Mesajları Okuma ve MongoDB’ye Yazma

Aşağıdaki kodu kullanarak Kafka’dan mesajları okuyabilir ve MongoDB’ye yazabilirsiniz:

from kafka import KafkaConsumer
from pymongo import MongoClient

# MongoDB bağlantısını yap
mongo_client = MongoClient("mongodb://localhost:27017/")
db = mongo_client["mydatabase"]
collection = db["mycollection"]

# Kafka tüketicisini tanımla
consumer = KafkaConsumer(
'example-topic',
bootstrap_servers='localhost:9092',
auto_offset_reset='earliest',
enable_auto_commit=True,
group_id='my-group'
)

# Kafka'dan mesajları oku ve MongoDB'ye yaz
for message in consumer:
print(f"Mesaj alındı: {message.value.decode('utf-8')}")
collection.insert_one({"message": message.value.decode('utf-8')})
print("Mesaj MongoDB'ye yazıldı.")

Bu kod, Kafka’dan gelen mesajları alır ve MongoDB’ye yazar.

5. MongoDB’den Mesaj Okuma

MongoDB’den mesajları okumak için aşağıdaki komutları kullanabilirsiniz:

mongosh --host localhost --port 27017

use mydatabase
db.mycollection.find().pretty()

--

--

No responses yet