Cover

Kubernetes Üzerinde Redpanda

Giriş


Büyük veri, günümüzde birçok şirket için önemli bir varlıktır. Müşteri davranışları, pazar trendleri ve operasyonel veriler gibi çeşitli kaynaklardan gelen büyük miktarda veriyi ifade eder. Bu veriler, doğru şekilde analiz edildiğinde, şirketlerin daha bilinçli kararlar vermesine, daha etkili pazarlama kampanyaları yürütmesine ve genel olarak operasyonlarını optimize etmesine yardımcı olabilir.

Apache Kafka gibi araçlar büyük verinin işlenmesinde önemli bir rol oynar. Büyük veri akışlarını gerçek zamanlı olarak yakalamak, işlemek ve analiz etmek için ideal platformlardan biridir. Yüksek performans, ölçeklenebilirlik ve güvenilirlik bu platformları büyük veri kümeleriyle çalışan şirketler için ideal bir çözüm haline getirir. Redpanda da Kafka gibi gerçek zamanlı veri işleme (event streaming) platformudur.

Amaç


Bu çalışmada Kubernetes sunucu kümesi (cluster)’ı üzerinde bir event streaming platformu olan Redpanda’yı kullanarak bir veri akışı oluşturup yöneteceğiz. Bu kapsamda Redpanda üzerinde oluşturacağımız bir topic‘ e produce edeceğimiz mesajları başka bir yoldan consume ederek filtrelendikten sonra aynı uygulama üzerinde başka bir topic‘e produce edeceğiz.

Kapsam ve Uygulama Mimarisi


Bu çalışmada, aşağıdaki adımları içerecek şekilde bir veri akışı oluşturacağız.

  1. Kubernetes Üzerinde Redpanda ve JupyterHub Kurulumu
  2. Redpanda’da Topic Oluşturulması
  3. Python ile Redpanda’ya Mesaj Produce Eden Uygulamanın Geliştirilmesi
  4. Python ile Redpanda’dan Mesaj Consume Eden ve Filtreleyerek Yeniden Redpanda’ya Mesaj Produce Eden Uygulamanın Geliştirilmesi
  5. Uygulamaların Test Edilmesi

Bahsi geçen veri akışını aşağıdaki mimari üzerine inşa edeceğiz.


Şekil 1. Uygulama Mimarisi

Çalışmanın gerçekleştirildiği ortam bilgileri aşağıda verilmiştir.

  • OS: CentOS Linux release 7.9.2009 (Core)
  • Base Memory: 23552 MB
  • Processor: 4 CPUs
  • Storage: 200 GB

Araçlar


Çalışma kapsamında kullanacağımız araç ve yöntemler aşağıda gibidir:

Kubernetes

Kubernetes, bir konteynerleştirme teknolojisi olan açık kaynaklı bir platformdur. Büyük veri işleme ve analizinde kullanılan birçok aracın dağıtık ve ölçeklenebilir bir şekilde yönetilmesine olanak tanımaktadır. Kubernetes, konteyner tabanlı uygulamaların otomatik olarak dağıtılması, ölçeklendirilmesi ve yönetilmesi için bir çözüm sunmaktadır. Bu sayede, sistem yöneticileri ve geliştiriciler uygulamalarını daha kolay bir şekilde çalıştırabilmekte ve yönetebilmektedir.

Özellikleri arasında yüksek kullanılabilirlik, otomatik ölçeklendirme, otomatik dağıtım, hata toleransı, servis keşfi ve yük dengelemesi yer almaktadır. Kubernetes, geniş bir ekosistem ve topluluk desteği ile birlikte gelmekte olup bu da kullanıcıların kolayca özelleştirilebilir ve genişletilebilir bir platform oluşturmasını sağlamaktadır.

Kubernetes, birçok büyük şirket ve kuruluş tarafından kullanılan bir teknoloji olup bulut tabanlı hizmet sağlayıcıları tarafından da desteklenmektedir. Hem geliştirme hem de operasyon ekipleri için büyük bir fayda sağlayan Kubernetes, veri işleme ve depolama alanında da önemli bir rol oynamaktadır.

Redpanda

Redpanda, ölçeklenebilir ve yüksek performanslı bir event streaming platformudur. Bu platform, Apache Kafka’nın bir muadili olup tamamen Kafka uyumlu bir API sağlamaktadır. Redpanda, yüksek performanslı, düşük gecikmeli ve kolay ölçeklenebilir bir event streaming çözümü sunmanın yanı sıra, gelişmiş yönetim araçları ve güçlü veri işleme yetenekleri de sağlamaktadır. Bu sayede, kullanıcılar veri işleme süreçlerini daha etkili bir şekilde yönetebilmekte ve büyük veri miktarlarıyla başa çıkabilmektedir.

Ayrıca, Redpanda’nın gelişmiş güvenlik önlemleri ve izleme özellikleri sayesinde, kullanıcılar verilerinin güvenliğini ve bütünlüğünü sağlayabilmektedir. Redpanda, her türlü işletme ihtiyacına uygun esnek bir çözüm sunmakta ve veri akışıyla ilgili zorlukları çözmek için kullanıcı dostu bir web arayüzü barındırmaktadır.

Bu nedenle Redpanda, event streaming alanında tercih edilen bir platform olarak öne çıkmaktadır.

Yöntem


Kubernetes Üzerinde Redpanda ve JupyterHub Kurulumu

Minikube Kurulumu ve Yapılandırılması

Öncelikle Minikube’ü kuruyoruz.

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

Minikube’ü kurduktan sonra --memory ve --cpu için istenilen kaynak konfigürasyonunu vererek Minikube’ü başlatıyoruz.

minikube start --memory <allocated_memory> --cpu <allocated_cpu> --nodes <number_of_nodes>

Bu çalışma kapsamında tek node’lu bir Kubernetes cluster‘ı kullanacağız. Çalışma ortamınıza göre --memory ve --cpus değerlerini değiştirebilirsiniz.

minikube start --memory 18432 --cpu 2 --nodes 1

kubectl Kurulumu

Kubectl, Kubernetes cluster‘ına karşı komutlar çalıştırmak için kullanılan bir komut satırı arayüzüdür. Kullanıcıların uygulamaları yönetmesine ve dağıtmasına, cluster kaynaklarını incelemesine, hata ayıklamasına ve daha fazlasına olanak tanımaktadır.

Aşağıdaki komut yardımıyla kubectl’i kuruyoruz.

# Install kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

kubectl’in kurulup kurulmadığını aşağıdaki komut ile kontrol ediyoruz.

# Checking Installation
kubectl version

Helm Kurulumu

Helm, Kubernetes uygulamalarını yönetmek için kullanılan bir paket yöneticisidir. Bir Helm chart‘ı, Kubernetes uygulamasını tanımlamakta ve onu bir paket olarak dağıtmaktadır. Bu sayede, Kubernetes uygulamalarının sürüm kontrolü, paketleme, yayımlama ve yaşam döngüsü yönetimi gibi işlemleri kolaylaştırmaktadır. Helm, uygulamaları hızlı ve güvenilir bir şekilde dağıtmanın yanı sıra, karmaşık uygulamaların yapılandırılması ve güncellemesi gibi işlemleri de basitleştirmektedir.

Aşağıdaki komutla Helm’i kuruyoruz.

# Installing Helm
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

Redpanda Kurulumu ve Yapılandırılması

Redpanda’yı, resmi dokümantasyonunda yer alan Helm chart ile kuruyoruz. Bu kapsamda öncelikle cert-manager adlı uygulamayı kuruyoruz. Cert-manager, Kubernetes üzerinde SSL/TLS sertifikalarının otomatik yönetimini sağlayan bir açık kaynaklı bir projedir. Bu, uygulamalarınızın HTTPS üzerinden güvenli bir şekilde erişilebilmesi için gerekli olan SSL/TLS sertifikalarının yönetimini kolaylaştırmaktadır.

# Adding Repo
helm repo add jetstack https://charts.jetstack.io
helm repo update

# Installing cert-manager
helm install cert-manager jetstack/cert-manager  --set installCRDs=true --namespace cert-manager  --create-namespace

Öncellikle yapılandırma ayarlarını içeren values.yaml dosyasını lokalimize indiriyor ve düzenlemek için açıyoruz.

# Adding Repo 
helm repo add redpanda https://charts.redpanda.com/ 
helm repo update 

# Getting .yaml File 
helm show values redpanda/redpanda > values-redpanda.yaml 
vi values-redpanda.yaml

values.yaml dosyasının ilgili yerlerinde aşağıdaki değişiklikleri yapıyor ve kaydediyoruz.

tls:
  enabled: false
statefulset:
  replicas: 1

Aşağıdaki komut sayesinde öncelikle Kubernetes cluster‘ı üzerinde redpanda adında bir namespace yaratılmakta daha sonra Redpanda uygulaması values.yaml dosyasında yer alan konfigürasyon doğrultusunda bu namespace‘e kurulmaktadır.

# Installing Redpanda
helm install redpanda redpanda/redpanda \
  --namespace redpanda \
  --create-namespace \
  --set external.domain=customredpandadomain.local \
  --set statefulset.initContainers.setDataDirOwnership.enabled=true \
  -f values-redpanda.yaml

JupyterHub’ın Kurulumu ve Yapılandırılması

JupyterHub’ı, benzer şekilde Helm chart ile kuruyoruz.

# Adding Repo
helm repo add jupyterhub https://jupyterhub.github.io/helm-chart/
# Installing JupyterHub
helm install jupyterhub jupyterhub/jupyterhub --version 3.2.2-0.dev.git.6518.h6975ed6a -n jupyterhub --create-namespace

JupyterHub web arayüzüne ulaşmak için aşağıdaki komutla bir port forwarding işlemi yapıyoruz.

# Port Forwarding
kubectl --namespace=jupyterhub port-forward service/proxy-public 8080:http

Daha sonra tarayıcıda http://localhost:8080 adresine gidiyor ve bir kullanıcı kaydı oluşturuyoruz.

Redpanda’da Topic Oluşturulması

Öncelikle Redpanda’nın web arayüzünde topic‘leri oluşturuyoruz. Bu amaçla web arayüzüne ulaşmak için aşağıdaki komutla bir port forwarding işlemi yapıyoruz.

# Port Forwarding
kubectl --namespace redpanda port-forward svc/redpanda-console 8090:8080

Daha sonra tarayıcıda http://localhost:8090 adresine gidiyoruz.


Şekil 2. Redpanda’nın Web Arayüzü

Redpanda’nın web arayüzünde Topics sekmesine giderek Create topic komutu ile demo ve turkey adında iki topic oluşturuyoruz.

Bu işlemi terminalde aşağıdaki komutlarla da gerçekleştirebiliyoruz.

# Running Commands Interactively in Kubernetes Pods
kubectl exec -it redpanda-0 in redpanda -- bash
rpk topic create demo
rpk topic create turkey
rpk topic list


Şekil 3. Redpanda’nın Web Arayüzünde Topic Oluşturulması

Python ile Redpanda’ya Mesaj Produce Eden Uygulamanın Geliştirilmesi

Aşağıdaki Python kodu, Kafka Python kütüphanesi aracılığıyla bir Kafka producer oluşturmakta ve Redpanda’daki demo topic‘ine mesaj produce etmektedir. Kod, veri oluşturmak için Faker kütüphanesini kullanmaktadır. Olası hafıza ve depolama sorunlarına sebebiyet vermemek için mesaj sayısını 100000 ile sınırlandırıyoruz. Browser’da http://localhost:8090 adresindeki Jupyter Notebook’ta message-producer adlı bir Notebook oluşturuyor ve aşağıdaki kodu çalıştırıyoruz.

# Installing Libraries and Dependencies
import json
import time
from kafka import KafkaProducer
from faker import Faker
import random

# Defining Variables
fake=Faker()
k = KafkaProducer(bootstrap_servers='redpanda-0.redpanda.redpanda.svc.cluster.local.:9093')
api_version = (k.config['api_version'])

# Creating Kafka Producer
producer = KafkaProducer(
    bootstrap_servers='redpanda-0.redpanda.redpanda.svc.cluster.local.:9093',
    security_protocol='PLAINTEXT',
    value_serializer=lambda v: json.dumps(v).encode('ascii'), key_serializer=lambda v: json.dumps(v).encode('ascii'),
    api_version=api_version
)

# Producing Messages
i=0
while i<100000:
    message={'name':fake.name(),
             'surname':fake.last_name(), 
             'country':fake.country(), 
             'gender':random.choice(['Male', 'Female']),
             'age':random.randint(18, 60), 
             'job':fake.job(), 
             'income':random.randint(17002, 100000)}    
    producer.send('demo',value=message)
    print(message)
    producer.flush()
    time.sleep(1)
    i+=1

Python ile Redpanda’dan Mesaj Consume Eden ve Filtreleyerek Yeniden Redpanda’ya Mesaj Produce Eden Uygulamanın Geliştirilmesi

Aşağıdaki Python kodu, Kafka’ya bağlanmak için Kafka Python kütüphanesini kullanarak basit bir Kafka consumer ve producer oluşturmaktadır. Kod, Redpanda’daki demo topic‘inden mesaj consume etmekte,  bu mesajları filtrelemekte ve belirli bir koşulu sağlayanları yine Redpanda’daki turkey topic‘ine yeniden produce etmektedir. Benzer şekilde browser’da http://localhost:8090 adresindeki Jupyter Notebook’ta message-consuming adlı bir Notebook oluşturuyor ve aşağıdaki kodu çalıştırıyoruz.

# Installing Libraries and Dependencies
from kafka import KafkaConsumer, KafkaProducer
import json

# Kafka Settings
KAFKA_BROKER_URL = 'redpanda-0.redpanda.redpanda.svc.cluster.local.:9093'
KAFKA_TOPIC = 'demo'
TURKEY_TOPIC = 'turkey'
k = KafkaProducer(bootstrap_servers=KAFKA_BROKER_URL)
api_version = (k.config['api_version'])

# Creating Kafka Consumer and Producer 
consumer = KafkaConsumer(
    'demo',
    bootstrap_servers=KAFKA_BROKER_URL,
    auto_offset_reset='earliest',
    enable_auto_commit=True,
    value_deserializer=lambda x: json.loads(x.decode('ascii')),
    api_version=api_version
)

producer = KafkaProducer(
    bootstrap_servers=KAFKA_BROKER_URL,
    security_protocol='PLAINTEXT',
    value_serializer=lambda v: json.dumps(v).encode('ascii'), key_serializer=lambda v: json.dumps(v).encode('ascii'),
    api_version=api_version
)

# Consuming, Filtering and Reproducing Messages
for message in consumer:
    data = message.value
    if data['country'] == 'Turkey' :
        print(data)
        producer.send(TURKEY_TOPIC, value=data)        
        producer.flush()

Uygulamaların Test Edilmesi

message-producer adlı Notebook’u çalıştırdığımızda Redpanda’daki demo topic‘ine mesaj produce etmeye başlıyoruz. Bu mesajları Redpanda’nın web arayüzündeki Topics sekmesinde demo topic‘inden de görüntüleyebiliyoruz.

Şekil 4. Redpanda’nın Web Arayüzünde demo Topic‘inden Görünüm

message-consuming adlı Notebook’u çalıştırdığımızda ise Redpanda’daki demo topic‘inden mesaj consume etmeye başlıyor, filtreleyerek ve uygun koşullara sahip olanları turkey adında başka bir topic‘e gönderiyoruz. Bu mesajları Redpanda’nın web arayüzündeki Topics sekmesinde turkey topic‘inden de görüntüleyebiliyoruz.

Şekil 5. message-consuming Adlı Notebook’un Output’u

Şekil 6. Redpanda’nın Web Arayüzünde turkey Topic‘inden Görünüm

Gördüğünüz gibi Redpanda’da demo topic‘inden consume ettiğimiz mesajları filtrelendikten sonra turkey adında başka bir topic‘e başarılı bir şekilde gönderdik.

Performans ve Ölçeklenebilirlik


Redpanda’nın performans ve ölçeklenebilirlik yetenekleri, bu mimari için kritik öneme sahiptir. Redpanda’nın tek bir kopya (replica)’ ya sahip olması, başlangıç için uygun olabilir. Ancak büyüyen yük altında performans ve ölçeklenebilirlik sorunlarına neden olabilir. Bu durumda, Redpanda kümesinin ölçeklendirilmesi, replica sayısının ve ayrılan kaynakların (memory, storage vb.) artırılması düşünülmelidir.

Veri işleme ve filtreleme operasyonlarının performansı da önemlidir. Veri işleme operasyonlarının optimize edilmesi, gerekirse dağıtık hesaplama yöntemlerinin kullanılması, depolama çözümlerinin geliştirilmesi ve gerekirse veritabanları ile entegrasyonun sağlanması yapılabilecek diğer işlemler arasındadır.

Sonuç ve Değerlendirme


Bu yazı kapsamında anlatılan hususların, Redpanda ile ilk kez tanışacak kişilere bir başlangıç rehberi olması amaçlanmıştır. Redpanda’nın güçlü özellikleri ve kullanım alanları, büyük ölçekli veri işleme ve akışını destekleyen bir platform oluşturmak için önemli bir temel sağlamaktadır. Redpanda, Kafka ekosisteminin esnekliği ve güvenilirliği ile birleşerek, modern veri işleme ve veri akışı gereksinimlerini karşılamak için ideal bir çözüm sunmaktadır.

Redpanda’ya yeni başlayanlar için, belgeleri incelemek, topluluk kaynaklarına başvurmak ve uygulamalar geliştirilirken en iyi uygulamaları takip etmek önemlidir. Redpanda’nın kullanımıyla ilgili deneyim kazanıldıkça, veri işleme ve akışı konusundaki yetenekler sürekli olarak geliştirebilir ve uygulamalar daha etkili hale getirebilir.

Redpanda’nın veri akışı ve yönetimi konusundaki yolculuklarda değerli bir araç olacağını düşünüyoruz.

Kaynaklar


Yazar Hakkında


Çevre Mühendisliği alanında 6 yılı kamuda olmak üzere 24 yıllık mesleki tecrübeye sahiptir. 2021 yılında veri bilimi, veri mühendisliği ve MLOps mühendisliğine ilgi duymaya başladı. Kasım 2022′ de kariyer değişikliği yaparak bilişim teknolojileri sektörüne geçti ve Veri Mühendisi olarak çalışmaya başladı. AWS Solution Architect Associate ve SnowPro Core Certification sahibidir.

Veri Mühendisi

Yazar Hakkında
Toplam 1 yazı
Tuncay Yaylalı
Tuncay Yaylalı
Çevre Mühendisliği alanında 6 yılı kamuda olmak üzere 24 yıllık mesleki tecrübeye sahiptir. 2021 yılında veri bilimi, veri mühendisliği ve MLOps mühendisliğine ilgi duymaya başladı. Kasım 2022' de kariyer değişikliği yaparak bilişim teknolojileri sektörüne geçti ve Veri Mühendisi olarak çalışmaya başladı. AWS Solution Architect Associate ve SnowPro Core Certification sahibidir.
Yorumlar (Yorum yapılmamış)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara