Sobes.tech
Junior — Middle

Ποιος μηχανισμός εγγύησης παράδοσης μηνυμάτων χρησιμοποιήθηκε στο Kafka στην προηγούμενη εργασία σας;

sobes.tech AI

Απάντηση από AI

Στο Kafka, οι εγγυήσεις παράδοσης μηνυμάτων διασφαλίζονται μέσω της ρύθμισης των παραμέτρων του παραγωγού και του καταναλωτή, καθώς και μέσω του μηχανισμού επιβεβαιώσεων (acks) και της διαχείρισης των offsets.

Κύρια μηχανισμοί:

  • acks — παράμετρος του παραγωγού που καθορίζει πόσα αντίγραφα πρέπει να επιβεβαιώσουν την εγγραφή του μηνύματος. Τιμές:

    • 0 — δεν περιμένει επιβεβαίωση (χαμηλή αξιοπιστία)
    • 1 — περιμένει επιβεβαίωση από τον ηγέτη
    • all-1) — περιμένει επιβεβαίωση από όλα τα ISR (σε-sync αντίγραφα), που διασφαλίζει τη μέγιστη αξιοπιστία
  • Επαναπροσπάθειες και ιδιομεταβλητότητα — ο παραγωγός μπορεί να επαναλάβει την αποστολή μηνυμάτων σε περίπτωση σφαλμάτων, και η ιδιομεταβλητότητα αποτρέπει διπλότυπα.

  • Επιβεβαίωση offsets (offset commit) — ο καταναλωτής, μετά την επεξεργασία των μηνυμάτων, κάνει commit τα offsets για να διασφαλίσει ότι τα μηνύματα δεν θα επεξεργαστούν ξανά.

Στην πράξη, για την εγγύηση παράδοσης "τουλάχιστον μία φορά" χρησιμοποιείται το acks=all και ένας ιδιομεταβλητός παραγωγός, ενώ για "ακριβώς μία φορά" ρυθμίζονται πρόσθετες επιλογές και διαχειρίζεται σε επίπεδο εφαρμογής.

Παράδειγμα ρύθμισης παραγωγού σε Go (με χρήση sarama):

config := sarama.NewConfig()
config.Producer.RequiredAcks = sarama.WaitForAll
config.Producer.Idempotent = true
config.Producer.Retry.Max = 5
producer, err := sarama.NewSyncProducer(brokers, config)

Έτσι, ο μηχανισμός εγγύησης παράδοσης είναι ένας συνδυασμός επιβεβαιώσεων, αναπαραγωγής και διαχείρισης offsets.