terraform > docker >KAFKA REST Proxy
Terraform Yapılandırması ile Kafka, Zookeeper ve Kafka REST Proxy
Öncelikle, kreuzwerker/docker provider’ını kullanarak Docker üzerinden gerekli konteynerleri oluşturacağız.
terraform maint.tf
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 2.0"
}
}
}
provider "docker" {}
# Özel bir Docker 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:latest"
}
# Kafka REST Proxy Docker imajını tanımlama
resource "docker_image" "kafka_rest_proxy" {
name = "confluentinc/cp-kafka-rest: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=PLAINTEXT://kafka:9092,OUTSIDE://localhost:9093",
"KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,OUTSIDE:PLAINTEXT",
"KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092,OUTSIDE://0.0.0.0:9093",
"KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT",
"KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181"
]
depends_on = [docker_container.zookeeper]
networks_advanced {
name = docker_network.kafka_net.name
}
}
# Kafka REST Proxy konteyneri oluşturma
resource "docker_container" "kafka_rest_proxy" {
name = "kafka-rest-proxy"
image = docker_image.kafka_rest_proxy.name
ports {
internal = 8082
external = 8082
}
env = [
"KAFKA_REST_BOOTSTRAP_SERVERS=kafka:9092",
"KAFKA_REST_LISTENERS=http://0.0.0.0:8082",
"KAFKA_REST_HOST_NAME=localhost"
]
depends_on = [docker_container.kafka]
networks_advanced {
name = docker_network.kafka_net.name
}
}
Bu Terraform kodlarıyla Zookeeper, Kafka ve Kafka REST Proxy konteynerlerini aynı Docker ağı üzerinde çalışacak şekilde yapılandırıyoruz. Aşağıdaki adımları izleyerek Terraform yapılandırmasını uygulayabilirsiniz:
1. Kodları kaydedin: Bu kodları bir .tf dosyasına kaydedin (örneğin main.tf).
2. Terraform’u başlatın:
terraform init
terraform plan
terraform apply -auto-approve
1. Yeni Bir Topic Oluşturma
Kafka’da yeni bir topic oluşturmak için aşağıdaki komutu kullanabilirsiniz. Bu örnekte test_topic isimli bir topic oluşturulacaktır
docker exec -it kafka /bin/bash
./kafka-topics.sh --create --topic test_topic --bootstrap-server kafka:9092 --partitions 1 --replication-factor 1
2. Topic’e Mesaj Gönderme
test_topic topic’ine JSON formatında bir mesaj göndermek için:
curl -X POST -H "Content-Type: application/vnd.kafka.json.v2+json" \
--data '{"records":[{"value":{"key":"value"}}]}' \
http://localhost:8082/topics/test_topic
3. Consumer Grubu Oluşturma
Tüketici grubu oluşturmak ve topic’ten mesajları çekmek için önce bir consumer grubu oluşturmanız gerekiyor:
curl -X POST -H "Content-Type: application/vnd.kafka.v2+json" \
--data '{"name": "test_consumer_instance", "format": "json", "auto.offset.reset": "earliest"}' \
http://localhost:8082/consumers/test_group
4. Topic’e Abone Olma
Oluşturduğunuz consumer’ı test_topic topic’ine abone etmek için:
curl -X POST -H "Content-Type: application/vnd.kafka.v2+json" \
--data '{"topics":["test_topic"]}' \
http://localhost:8082/consumers/test_group/instances/test_consumer_instance/subscription
5. Mesajları Tüketme
Consumer’ı kullanarak test_topic içindeki mesajları tüketmek için:
curl -X GET -H "Accept: application/vnd.kafka.json.v2+json" \
http://localhost:8082/consumers/test_group/instances/test_consumer_instance/records