הגדרת Schema Registry של Kafka לאימות הודעות

ללא בקרת סכמות, נושאי Kafka הופכים למקור לתקלות: שינוי פורמט אחד רשלני וצרכנים קורסים. אנו מגדירים Schema Registry עם תמיכה ב-Avro, Protobuf ו-JSON Schema כך שכל אבולוציה של נתונים מתבצעת בבטחה ובצורה צפויה. הצוות שלנו מספק את הפרויקט במפתח מלא—מביקורת סכמות קיימות ועד יישום ותמיכה שוטפת—ובכך מבטיח פעילות יציבה של הצינור שלך.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
הגדרת Schema Registry של Kafka לאימות הודעות
מורכב
~2-3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113
  • פיתוח אתר עבור SBH Partners
    פיתוח אתר עבור SBH Partners
    1201
  • פיתוח אתר עבור Red Pear
    פיתוח אתר עבור Red Pear
    619

ללא Schema Registry, נושאי Kafka הם זרמי בתים עיוורים. יצרן משנה את פורמט ה-JSON — הצרכן קורס עם NullPointerException. לפי סטטיסטיקות, 70% מתקלות הייצור קשורות לאי-תאימות סכמות. אנו פותרים בעיה זו עם Confluent Schema Registry: סכמת ההודעה מנוהלת בגרסאות, האבולוציה נשלטת, ושינויים לא תואמים נחסמים לפני הפרסום. אנו מתקינים Schema Registry עבור Apache Avro, Protobuf, או JSON Schema במפתח מלא — נבחן את הפרויקט שלך תוך יום אחד.

Schema Registry הוא שירות HTTP נפרד המאחסן סכמות בנושא _schemas של Kafka. בשליחה הראשונה, היצרן רושם את הסכמה ומקבל schema_id (מספר שלם). במקום הסכמה המלאה, רק ה-schema_id (4 בתים) מוטמע בכל הודעה — זהו פורמט ה-wire של Confluent. הודעת Avro תופסת פי 2-3 פחות מקום מאשר סכמת JSON מקבילה.

Producer → [magic byte 0x00][schema_id 4 bytes][serialized payload] → Kafka Consumer → читает schema_id → запрашивает схему из Registry → десериализует 

למה Schema Registry הוא חובה לייצור?

ללא Schema Registry, אבולוציית סכמות הופכת לסיוט. אתה מוסיף שדה ל-JSON — צרכנים ישנים שלא מצפים לו עלולים לקרוס. Schema Registry במצב BACKWARD מבטיח שהסכמה החדשה תואמת לגרסאות קודמות. זה מונע השבתות. הניסיון שלנו: יותר מ-50 פרויקטים עם Kafka, ואף אחד לא עבר בלי Registry. אימוץ Schema Registry מקצר את זמן הדיבוג ב-80%, וחוסך $2k–5k בשנה.

התקנה והגדרה בסיסית

התקנה טיפוסית דרך Docker Compose:

---
version: '3.8'
services:
  schema-registry:
    image: confluentinc/cp-schema-registry:7.6.0
    ports:
      - "8081:8081"
    environment:
      SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: "kafka-1:9092,kafka-2:9092,kafka-3:9092"
      SCHEMA_REGISTRY_HOST_NAME: schema-registry
      SCHEMA_REGISTRY_LISTENERS: "http://0.0.0.0:8081"
      SCHEMA_REGISTRY_KAFKASTORE_TOPIC: "_schemas"
      SCHEMA_REGISTRY_KAFKASTORE_TOPIC_REPLICATION_FACTOR: 3
      SCHEMA_REGISTRY_SCHEMA_COMPATIBILITY_LEVEL: "BACKWARD"
      SCHEMA_REGISTRY_KAFKASTORE_SECURITY_PROTOCOL: PLAINTEXT
    restart: unless-stopped
---

לייצור — לפחות 2 מופעים מאחורי מאזן עומסים, אחד הוא master. אנו מבטיחים סובלנות לתקלות.

איך לבחור מצב תאימות?

מצב תיאור מתי להשתמש
BACKWARD סכמה חדשה יכולה לקרוא נתונים שנכתבו על ידי סכמה ישנה בחירה סטנדרטית לייצור
FORWARD סכמה ישנה יכולה לקרוא נתונים שנכתבו על ידי סכמה חדשה כאשר צרכנים מתעדכנים לאט יותר מיצרנים
FULL שני הכיוונים רק כאשר הכרחי בהחלט
NONE ללא בדיקות רק לפיתוח, לא לייצור

אנו ממליצים על Producer → [magic byte 0x00][schema_id 4 bytes][serialized payload] → Kafka Consumer → читает schema_id → запрашивает схему из Registry → десериализует לרוב התרחישים. זה מאפשר הוספת שדות עם ברירת מחדל והסרת שדות ללא ברירת מחדל.

מה אם סכמות לא תואמות?

אם CI/CD נכשל עם שגיאת אי-תאימות, יש שתי אפשרויות: או להחזיר את שינוי הסכמה ולשפר אותו, או ליצור נושא חדש עם גרסת הסכמה החדשה ולהעביר יצרנים/צרכנים. Schema Registry מקל על החזרה לאחור על ידי רישום מחדש של הגרסה הקודמת.

רישום סכמות דרך REST API

לאחר הגדרת הסכמה, רשום אותה ב-Schema Registry באמצעות REST API:

curl -X POST http://schema-registry:8081/subjects/order-events-value/versions \
  -H "Content-Type: application/vnd.schemaregistry.v1+json" \
  -d '{ "schema": "{\"type\":\"record\",\"name\":\"OrderEvent\",\"namespace\":\"com.example.orders\",\"fields\":[{\"name\":\"event_id\",\"type\":\"string\"},{\"name\":\"order_id\",\"type\":\"long\"},{\"name\":\"status\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"double\"},{\"name\":\"created_at\",\"type\":{\"type\":\"long\",\"logicalType\":\"timestamp-millis\"}}]} }'"}

השוואת פורמטים של Avro, Protobuf ו-JSON Schema

פורמט יתרונות חסרונות
Avro בינארי קומפקטי, אינטגרציה טבעית עם Confluent מורכבות ללא יצירת קוד
Protobuf מהיר יותר מ-Avro, תומך בשפות רבות דורש קומפילציה של .proto למחלקות
JSON Schema קריא לאדם, אין צורך ביצירת קוד גודל גדול יותר, פחות כלים

הבחירה תלויה במערכת האקולוגית: Avro הוא סטנדרט ל-Kafka, Protobuf למיקרוסרוויסים עם gRPC, ו-JSON Schema לאינטגרציות פשוטות. פרטים נוספים בתיעוד הרשמי של Confluent Schema Registry.

יצרן Java עם אינטגרציית Schema Registry

ל-Java, השתמש ב-version: '3.8' services: schema-registry: image: confluentinc/cp-schema-registry:7.6.0 ports: - "8081:8081" environment: SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: "kafka-1:9092,kafka-2:9092,kafka-3:9092" SCHEMA_REGISTRY_HOST_NAME: schema-registry SCHEMA_REGISTRY_LISTENERS: "http://0.0.0.0:8081" SCHEMA_REGISTRY_KAFKASTORE_TOPIC: "_schemas" SCHEMA_REGISTRY_KAFKASTORE_TOPIC_REPLICATION_FACTOR: 3 SCHEMA_REGISTRY_SCHEMA_COMPATIBILITY_LEVEL: "BACKWARD" SCHEMA_REGISTRY_KAFKASTORE_SECURITY_PROTOCOL: PLAINTEXT restart: unless-stopped . הוסף תלויות ל-BACKWARD:

<dependency>
  <groupId>io.confluent</groupId>
  <artifactId>kafka-avro-serializer</artifactId>
  <version>7.6.0</version>
</dependency>
<dependency>
  <groupId>org.apache.avro</groupId>
  <artifactId>avro</artifactId>
  <version>1.11.3</version>
</dependency>
Properties props = new Properties();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka-1:9092");
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, KafkaAvroSerializer.class);
props.put("schema.registry.url", "http://schema-registry:8081");
props.put("auto.register.schemas", false); // В проде — запрещаем авторегистрацию
props.put("use.latest.version", true);
KafkaProducer<String, OrderEvent> producer = new KafkaProducer<>(props);
OrderEvent event = OrderEvent.newBuilder()
    .setEventId(UUID.randomUUID().toString())
    .setOrderId(12345L)
    .setUserId(67890L)
    .setStatus(OrderStatus.CREATED)
    .setCreatedAt(Instant.now().toEpochMilli())
    .build();
producer.send(new ProducerRecord<>("order-events", event.getOrderId().toString(), event));

הגדרת curl -X POST http://schema-registry:8081/subjects/order-events-value/versions \ -H "Content-Type: application/vnd.schemaregistry.v1+json" \ -d '{ "schema": "{\"type\":\"record\",\"name\":\"OrderEvent\",\"namespace\":\"com.example.orders\",\"fields\":[{\"name\":\"event_id\",\"type\":\"string\"},{\"name\":\"order_id\",\"type\":\"long\"},{\"name\":\"status\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"double\"},{\"name\":\"created_at\",\"type\":{\"type\":\"long\",\"logicalType\":\"timestamp-millis\"}}]} }' ו-KafkaAvroSerializer היא חובה לייצור כדי למנוע רישום מקרי של סכמות לא מאומתות.

איך לשלב בדיקות תאימות ב-CI/CD?

לפני פריסת גרסת שירות חדשה, הרץ סקריפט לבדיקת תאימות:

#!/bin/bash
SCHEMA_FILE="src/main/avro/OrderEvent.avsc"
SUBJECT="order-events-value"
REGISTRY_URL="http://schema-registry:8081"
SCHEMA_JSON=$(jq -c . "$SCHEMA_FILE")
RESPONSE=$(curl -s -X POST \
  "${REGISTRY_URL}/compatibility/subjects/${SUBJECT}/versions/latest" \
  -H "Content-Type: application/vnd.schemaregistry.v1+json" \
  -d "{\"schema\": $(echo $SCHEMA_JSON | jq -R .)}")
COMPATIBLE=$(echo $RESPONSE | jq -r '.is_compatible')
if [ "$COMPATIBLE" != "true" ]; then
  echo "FAIL: Schema is not compatible: $RESPONSE"
  exit 1
fi
echo "OK: Schema is backward compatible"

אם התאימות מופרת — ה-pipeline נכשל, והסכמה הלא תואמת לא מגיעה לייצור.

מה כלול בהתקנת Schema Registry במפתח מלא

  • פריסת Schema Registry בייצור (מינימום 2 צמתים)
  • הגדרה ורישום סכמות Avro לכל הנושאים
  • הגדרת מצבי תאימות (BACKWARD / FORWARD / FULL)
  • אינטגרציית יצרנים (Java/Python) עם סריאליזרים
  • הוספת בדיקות תאימות ל-CI/CD pipeline
  • תיעוד תהליך אבולוציית הסכמות לצוות
  • הדרכת מפתחים (יום אחד)

לוח זמנים: בין 3 ל-5 ימים תלוי במספר הנושאים. העלות מחושבת באופן אישי.

ניטור ותמיכה

Schema Registry מייצא מדדים ל-Prometheus. אנו מגדירים התראות על שינויים לא תואמים וכשלי master. אנו מבטיחים: לאחר ההתקנה, שום שינוי לא תואם לא מגיע לייצור. ניסיון: למעלה מ-5 שנים בעבודה עם Kafka, 50+ פרויקטים. הזמינו ייעוץ על ארכיטקטורת ה-Kafka שלכם — נעזור ליישם Schema Registry תוך 3 ימים.