iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 7
2
  • Kafka HA on Kubernetes
    • Deploy kafka-ha
    • 應用使用 kafka 的設定
    • kafka utility scripts, topic operation, kafka benchmark
    • Kafka 怎麼擺, HA topology
    • 集群內部的 HA 設定,網路設定
    • Prometheus Metrics Exporter 很重要
    • 穩定性與效能調校

由於我比較熟悉 GCP / GKE 的服務,這篇的操作過程都會以 GCP 平台作為範例,不過操作過程大體上是跨平台通用的。


碎念

30 天每天一文真的蠻逼人的,每一篇都是新寫,還要盡可能顧及文章品質,下班趕文章,各位大德寫看看就知道

  • 這邊調整了當初想寫的文章,內容應該都會帶到
    • elk
    • kafka-ha
    • reids-ha
    • prometheus
    • kubernetes on gcp
  • 但不會再一篇 10000 字了,逼死我吧...
  • 寫不完的部份 30 天候會在IT邦幫忙,或是我的 Github Page https://chechiachang.github.io/補完

寫文章真的是體力活,覺得我的文章還有參考價值,請左邊幫我點讚按個喜歡右上角幫我按個追縱,底下歡迎留言討論。給我一點繼續走下去的動力。

Exausted Cat Face


摘要

  • 簡介 kafka
  • 部屬 kafka 到 kubernetes 上

簡介 kafka

Kafka 是分散式的 streaming platform,可以 subscribe & publish 訊息,可以當作是一個功能強大的 message queue 系統,由於分散式的架構,讓 kafka 有很大程度的 fault tolerance。

我們今天就來部屬一個 kafka。

Deploy

我把我的寶藏都在這了https://github.com/chechiachang/kafka-on-kubernetes

下載下來的 .sh ,跑之前養成習慣貓一下

cat install.sh


#!/bin/bash
#
# https://github.com/helm/charts/tree/master/incubator/kafka

#HELM_NAME=kafka
HELM_NAME=kafka-1

helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator

# Stable: chart version: kafka-0.16.2 app version: 5.0.1
helm upgrade --install ${HELM_NAME} incubator/kafka --version 0.16.2 -f values-staging.yaml

Helm

我們這邊用 helm 部屬,之所以用 helm ,因為這是我想到最簡單的方法,能讓輕鬆擁有一套功能完整的 kafka。所以我們先用。

沒用過 helm 的大德可以參考 Helm Quickstart,先把 helm cli 與 kubernetes 上的 helm tiller 都設定好

helm init

Helm Chart

一個 helm chart 可以當成一個獨立的專案,不同的 chart 可以在 kubernetes 上協助部屬不同的項目。

這邊使用了還在 incubator 的chart,雖然是 prod ready,不過使用上還是要注意。

使用前先把 incubator 的 helm repo 加進來

helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator

Install

這邊是用 upgrade --install,已安裝就 upgrade,沒安裝就 install,之後可以用這個指令升版

helm upgrade --install ${HELM_NAME} incubator/kafka --version 0.16.2 -f values-staging.yaml

Version

這邊使用的版本:

  • chart version: kafka-0.16.2
  • app version: 5.0.1
  • kafka Image: confluentinc/cp-kafka:5.0.1
  • zookeeper Image: gcr.io/google_samples/k8szk:v3
  • kafka exporter: danielqsj/kafka-exporter:v1.2.0

values-staging

透過 helm chart,把啟動參數帶進去,這邊我們看幾個比較重要的,細節之後的文章在一起討論。

https://github.com/chechiachang/kafka-on-kubernetes/blob/master/values-staging.yaml

replicas: 3

安裝三個 kafka,topology 的東西也是敬待下篇XD

## The kafka image repository
image: "confluentinc/cp-kafka"

## The kafka image tag

底層執行的 kafka 是 conluent kafka

## Configure resource requests and limits
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
resources: {}
  # limits:
  #   cpu: 200m
  #   memory: 4096Mi
  # requests:
  #   cpu: 100m
  #   memory: 1024Mi
kafkaHeapOptions: "-Xmx4G -Xms1G"

這邊可以調整在 kubernetes 上面的 limit 跟 request

  • Deploy 會先去跟 node 問夠不夠,夠的話要求 node 保留這些資源給 Pod
  • Runtime 超過 limit,Pod 會被 kubernetes 幹掉,不過我們是 JVM,外部 resource 爆掉前,應該會先因 heap 滿而死。一個施主自盡的感覺。
  • CPU 蠻省的,吃比較多是 memory。但也要看你的使用情境
prometheus

對我們有上 promethues,基本上就是 kafka-exporter 把 kafka metrics 倒出去 prometheus,這個也是詳見下回分解。

跑起來了

$ kubectl get po | grep kafka

NAME                                                     READY   STATUS      RESTARTS   AGE
kafka-1-0                                                1/1     Running     0          224d
kafka-1-1                                                1/1     Running     0          224d
kafka-1-2                                                1/1     Running     0          224d
kafka-1-exporter-88786d84b-z954z                         1/1     Running     0          224d
kafka-1-zookeeper-0                                      1/1     Running     0          224d
kafka-1-zookeeper-1                                      1/1     Running     0          224d
kafka-1-zookeeper-2                                      1/1     Running     0          224d

上一篇
ELK Stack 6 - Logstash on GKE
下一篇
Kafka HA 2 - Introduction
系列文
其實我真的沒想過只是把服務丟上 kubernetes 就有這麼多問題只好來參加30天分享那些年我怎麼在 kubernetes 上踩雷各項服務30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
chichi
iT邦新手 2 級 ‧ 2019-09-23 08:16:22

kafka 可以拿來取代 elk 中 client 的 beat 嗎 ?

kafka 沒有 beat 中收集 log, file, metrics 的功能。
我補上一篇 kafka 基本功能介紹。

我要留言

立即登入留言