Tôi có một cụm kafka chạy trên cụm Kubernetes tích hợp với 3 nhà môi giới Kafka và 3 Người quản lý vườn thú, mỗi thành phần chạy trong một bộ trạng thái.
Biểu đồ điều khiển mà tôi sử dụng để triển khai cụm là biểu đồ tùy chỉnh vì tôi cần quyền truy cập từ bên ngoài vào cụm thông qua BigIp F5 và không tìm thấy biểu đồ điều khiển thực hiện việc này.
Hình ảnh Kafka là hợp lưu/cp-kafka:5.4.0 và người quản lý vườn thú là hợp lưu/cp-zookeeper:5.4.0
/var/lib/zookeeper/data
và /var/lib/zookeeper/log
cho Zookeeper được ánh xạ tới các tập liên tục.
Tương tự cho /var/lib/kafka
trên Kafka
Tôi sử dụng hlebalbau/kafka-manager:stable để xem trạng thái của cụm.
Tôi thiết lập ba phân vùng cho mỗi chủ đề và hệ số sao chép cũng bằng ba.
Gần đây tôi nhận ra rằng nếu tôi khởi động lại cả ba nhà môi giới kafka cùng một lúc (với kubectl xóa nhóm
) tất cả nội dung chủ đề đã bị mất:
- kích thước nhật ký giảm xuống 0 cho mỗi chủ đề
- danh sách các chủ đề vẫn giữ nguyên
- danh sách người tiêu dùng vẫn giữ nguyên, nhưng mỗi phần bù hiện tại của người tiêu dùng giảm xuống giá trị âm (nếu người tiêu dùng ở mức bù 10000 cho chủ đề tin nhắn 10000, thì kích thước chủ đề giảm xuống 0 và phần bù của người tiêu dùng thành -10000 )
Tôi chưa bao giờ gặp phải bất kỳ sự cố nào khi khởi động lại một nhà môi giới kafka tại một thời điểm và đợi nó bắt đầu trước khi khởi động lại một nhà môi giới khác.
Tôi biết rằng một cụm kafka không có nghĩa là bị dừng hoặc khởi động lại như thế này. Nhưng tôi không mong đợi loại hành vi này.
Đó có phải là hành vi mong đợi không? Hay tôi đã bỏ lỡ một cái gì đó rõ ràng?
Đây là mẫu Yaml của tôi cho một nhà môi giới kafka. Như được chỉ ra bởi tên của nó, các chờ-zookeeper.sh
kịch bản "chỉ" đợi những người trông coi vườn thú bắt đầu.
---
apiVersion: ứng dụng/v1
loại: StatefulSet
metadata:
tên: kafka-bộ điều khiển-1
thông số kỹ thuật:
bản sao: 1
bộ chọn:
trận đấuNhãn:
ứng dụng: kafka-1
tên dịch vụ: kafka1-không đầu
mẫu:
metadata:
nhãn:
ứng dụng: kafka-1
cụm: kafka
thông số kỹ thuật:
initContainer:
- tên: init-wait-zookeeper
hình ảnh: bash: mới nhất
lệnh: ["/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"]
khối lượngMount:
- tên: wait-zookeeper-configmap
mountPath: /wait-zookeeper-configmap
- tên: wait-zookeeper-emptydir
mountPath: /wait-zookeeper-emptydir
sự giống nhau:
podAntiAffinity:
ưa thíchDuringSchedulingIgnoredDuringExecution:
- trọng lượng: 100
podAffinityTerm:
nhãnSelector:
matchExpressions:
- phím: ứng dụng
nhà điều hành: Trong
giá trị:
- kafka-2
- kafka-3
{{- if gt .Values.workerNodesNumber 5.0 }}
- người quản lý vườn thú-1
- người quản lý vườn thú-2
- người quản lý vườn thú-3
{{- chấm dứt }}
khóa cấu trúc liên kết: "kubernetes.io/hostname"
hộp đựng:
- tên: kafka1
hình ảnh: hợp lưu/cp-kafka:5.4.0
tài nguyên:
yêu cầu:
bộ nhớ: "512Mi"
Hạn mức:
bộ nhớ: "{{.Values.jvmMaxHeapSizeGb}}Gi"
cổng:
- Cảng container: 9092
vi:
- tên: HOST_IP
giá trịTừ:
trường Tham khảo:
trườngPath: status.hostIP
- tên: KAFKA_LISTENERS
giá trị: "PLAINTEXT://0.0.0.0:9092"
- tên: KAFKA_ADVERTISED_LISTENERS
giá trị: "PLAINTEXT://$(HOST_IP):{{ add .Values.startingNodePort 0 }}"
- tên: KAFKA_BROKER_ID
giá trị: "10"
- tên: KAFKA_ZOOKEEPER_CONNECT
giá trị: "zookeeper-controller-1-0.zoo1-headless:2181,zookeeper-controller-2-0.zoo2-headless:2181,zookeeper-controller-3-0.zoo3-headless:2181"
- tên: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR
giá trị: "3"
- tên: KAFKA_DELETE_TOPIC_ENABLE
giá trị: "đúng"
- tên: KAFKA_DEFAULT_REPLICATION_FACTOR
giá trị: "3"
- tên: KAFKA_NUM_PARTITIONS
giá trị: "{{.Values.defaultPartitionsNumber}}"
- tên: KAFKA_LOG_RETENTION_HOURS
giá trị: "{{.Values.retentionTimeHours}}"
- tên: KAFKA_OFFSETS_RETENTION_MINUTES
giá trị: "{{.Values.retentionTimeHours | mul 60 }}"
- tên: JMX_PORT
giá trị: "{{ thêm .Values.startingNodePort 3 }}"
- tên: KAFKA_JMX_HOSTNAME
giá trị: "kafka-dịch vụ-1"
- tên: KAFKA_HEAP_OPTS
giá trị: "-Xms512m -Xmx{{.Values.jvmMaxHeapSizeGb}}G"
livenessProbe:
người điều hành:
chỉ huy:
- /bin/bash
- -c
- "bỏ đặt JMX_PORT && kafka-broker-api-versions --bootstrap-server=localhost:9092"
ban đầuDelaySeconds: 60
chu kỳGiây: 20
khối lượngMount:
- tên: "kafka-nhật ký"
mountPath: "/var/lib/kafka"
khối lượng:
- tên: "chờ-zookeeper-configmap"
bản đồ cấu hình:
tên: "trình khởi tạo kafka"
mặt hàng:
- khóa: "chờ-zookeeper.sh"
đường dẫn: "chờ-zookeeper.sh"
- tên: "chờ-người quản lý vườn thú-emptydir"
Dir trống: {}
volumeClainMẫu:
- metadata:
tên: kafka-log
thông số kỹ thuật:
storageClassName: {{.Values.storageClassName}}
accessModes: ["ReadWriteOnce"]
tài nguyên:
yêu cầu:
lưu trữ: {{.Values.storageSizeGb}}Gi