ฉันมีคลัสเตอร์คาฟคาที่ทำงานบนคลัสเตอร์ Kubernetes ที่ผสานรวมกับโบรกเกอร์คาฟคา 3 รายและผู้ดูแลสวนสัตว์ 3 ราย แต่ละองค์ประกอบทำงานใน statefulset
แผนภูมิหางเสือที่ฉันใช้เพื่อปรับใช้คลัสเตอร์นั้นเป็นแผนภูมิแบบกำหนดเอง เนื่องจากฉันต้องการการเข้าถึงภายนอกไปยังคลัสเตอร์ผ่าน BigIp F5 และไม่พบแผนภูมิหางเสือที่ทำสิ่งนี้
ภาพลักษณ์ของคาฟคาคือ ไหลมารวมกัน/cp-kafka:5.4.0 และคนดูแลสวนสัตว์ก็คือ ไหลมารวมกัน/cp-zookeeper:5.4.0
/var/lib/ผู้ดูแลสวนสัตว์/data
และ /var/lib/zookeeper/log
สำหรับ Zookeeper ถูกแมปกับวอลุ่มถาวร
เหมือนกันสำหรับ /var/lib/คาฟคา
บนคาฟคา
ฉันใช้ hlebalbau/kafka-manager:stable เพื่อดูสถานะของคลัสเตอร์
ฉันตั้งค่าพาร์ติชันสามพาร์ติชันต่อหัวข้อ และปัจจัยการจำลองก็เท่ากับสามเช่นกัน
เมื่อเร็ว ๆ นี้ฉันตระหนักว่าหากฉันเริ่มต้นโบรกเกอร์คาฟคาทั้งสามใหม่พร้อมกัน (ด้วย kubectl ลบพ็อด
) เนื้อหาหัวข้อทั้งหมดหายไป:
- ขนาดบันทึกลดลงเหลือศูนย์สำหรับแต่ละหัวข้อ
- รายการหัวข้อยังคงเหมือนเดิม
- รายการผู้บริโภคยังคงเหมือนเดิม แต่ค่าชดเชยปัจจุบันของผู้บริโภคแต่ละรายการจะลดลงเป็นค่าลบ (หากผู้บริโภคอยู่ที่ค่าชดเชย 10,000 สำหรับหัวข้อข้อความ 10,000 ข้อความ ขนาดหัวข้อจะลดลงเป็นศูนย์และค่าชดเชยของผู้บริโภคเป็น -10000 )
ฉันไม่เคยพบปัญหาใด ๆ เมื่อรีสตาร์ทโบรกเกอร์ kafka หนึ่งรายในแต่ละครั้งและรอให้เริ่มต้นใหม่ก่อนที่จะเริ่มใหม่อีกครั้ง
ฉันรู้ว่าคลัสเตอร์คาฟคาไม่ได้ถูกกำหนดให้หยุดหรือเริ่มต้นใหม่เช่นนี้ แต่ฉันไม่ได้คาดหวังว่าจะมีพฤติกรรมแบบนี้
เป็นพฤติกรรมที่คาดหวัง ? หรือฉันพลาดอะไรที่ชัดเจนไป?
นี่คือเทมเพลต Yaml ของฉันสำหรับนายหน้าคาฟคา ตามที่ระบุชื่อไว้ รอ-zookeeper.sh
สคริปต์ "เพียง" รอให้ผู้ดูแลสวนสัตว์เริ่มทำงาน
---
apiVersion: แอป/v1
ประเภท: StatefulSet
ข้อมูลเมตา:
ชื่อ: kafka-controller-1
ข้อมูลจำเพาะ:
แบบจำลอง: 1
ตัวเลือก:
ป้ายกำกับการแข่งขัน:
แอป: คาฟคา-1
ชื่อบริการ: kafka1-หัวขาด
แม่แบบ:
ข้อมูลเมตา:
ป้ายกำกับ:
แอป: คาฟคา-1
คลัสเตอร์: คาฟคา
ข้อมูลจำเพาะ:
คอนเทนเนอร์เริ่มต้น:
- ชื่อ: init-wait-zookeeper
ภาพ: ทุบตี: ล่าสุด
คำสั่ง: ["/usr/local/bin/bash","-c","cp /wait-zookeeper-configmap/wait-zookeeper.sh /wait-zookeeper-emptydir/ && chmod 755 /wait-zookeeper-emptydir/ wait-zookeeper.sh && /wait-zookeeper-emptydir/wait-zookeeper.sh"]
ปริมาณการติดตั้ง:
- ชื่อ: wait-zookeeper-configmap
mountPath: /wait-zookeeper-configmap
- ชื่อ: wait-zookeeper-emptydir
mountPath: /wait-zookeeper-emptydir
ความสัมพันธ์กัน:
podAntiAffinity:
ที่ต้องการระหว่างการจัดกำหนดการละเว้นระหว่างการดำเนินการ:
- น้ำหนัก: 100
podAffinityเทอม:
ตัวเลือกป้ายกำกับ:
การจับคู่นิพจน์:
- คีย์: แอป
ผู้ดำเนินการ: ใน
ค่า:
-คาฟคา-2
-คาฟคา-3
{{- ถ้า gt .Values.workerNodesNumber 5.0 }}
-คนดูแลสัตว์-1
-คนดูแลสัตว์-2
-คนดูแลสัตว์-3
{{- จบ }}
โทโพโลยีคีย์: "kubernetes.io/hostname"
ตู้คอนเทนเนอร์:
- ชื่อ: คาฟคา1
ภาพ: confluientinc/cp-kafka:5.4.0
ทรัพยากร:
คำขอ:
หน่วยความจำ: "512Mi"
ขีด จำกัด :
หน่วยความจำ: "{{.Values.jvmMaxHeapSizeGb}}Gi"
พอร์ต:
- พอร์ตคอนเทนเนอร์: 9092
สภาพแวดล้อม:
- ชื่อ: HOST_IP
มูลค่าจาก:
fieldRef:
fieldPath: สถานะ.hostIP
- ชื่อ: KAFKA_LISTENERS
ค่า: "PLAINTEXT://0.0.0.0:9092"
- ชื่อ: KAFKA_ADVERTISED_LISTENERS
ค่า: "PLAINTEXT://$(HOST_IP):{{ เพิ่ม .Values.startingNodePort 0 }}"
- ชื่อ: KAFKA_BROKER_ID
ค่า: "10"
- ชื่อ: KAFKA_ZOOKEEPER_CONNECT
ค่า: "ผู้ควบคุมสวนสัตว์-1-0.zoo1-หัวขาด:2181,ผู้ควบคุมสวนสัตว์-2-0.zoo2-หัวขาด:2181,ผู้ควบคุมสวนสัตว์-3-0.zoo3-หัวขาด:2181"
- ชื่อ: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR
ค่า: "3"
- ชื่อ: KAFKA_DELETE_TOPIC_ENABLE
ค่า: "จริง"
- ชื่อ: KAFKA_DEFAULT_REPLICATION_FACTOR
ค่า: "3"
- ชื่อ: KAFKA_NUM_PARTITIONS
ค่า: "{{.Values.defaultPartitionsNumber}}"
- ชื่อ: KAFKA_LOG_RETENTION_HOURS
ค่า: "{{.Values.retentionTimeHours}}"
- ชื่อ: KAFKA_OFFSETS_RETENTION_MINUTES
ค่า: "{{.Values.retentionTimeHours | mul 60 }}"
- ชื่อ: JMX_PORT
ค่า: "{{ เพิ่ม .Values.startingNodePort 3 }}"
- ชื่อ: KAFKA_JMX_HOSTNAME
ค่า: "คาฟคา-บริการ-1"
- ชื่อ: KAFKA_HEAP_OPTS
ค่า: "-Xms512m -Xmx{{.Values.jvmMaxHeapSizeGb}}G"
livenessProbe:
ผู้บริหาร:
สั่งการ:
- /ถังขยะ/ทุบตี
- -ค
- "ยกเลิกการตั้งค่า JMX_PORT && kafka-broker-api-versions --bootstrap-server=localhost:9092"
initialDelaySeconds: 60
periodSeconds: 20
ปริมาณการติดตั้ง:
- ชื่อ: "คาฟคาล็อก"
mountPath: "/var/lib/kafka"
ปริมาณ:
- ชื่อ: "รอ Zookeeper-configmap"
configMap:
ชื่อ: "kafka-initializer"
รายการ:
- คีย์: "wait-zookeeper.sh"
เส้นทาง: "wait-zookeeper.sh"
- ชื่อ: "รอ-zookeeper-emptydir"
ว่างเปล่าDir: {}
VolumeClaimTemplates:
- ข้อมูลเมตา:
ชื่อ: kafka-logs
ข้อมูลจำเพาะ:
storageClassName: {{.Values.storageClassName}}
โหมดการเข้าถึง: ["ReadWriteOnce"]
ทรัพยากร:
คำขอ:
พื้นที่เก็บข้อมูล: {{.Values.storageSizeGb}}Gi