Junior — Middle
Kā tiek nodrošināta iespēja piegādāt ziņojumus vismaz vienu reizi Kafka?
sobes.tech AI
Atbilde no AI
Apache Kafka nodrošina ziņojumu piegādi ar garantiju "vismaz vienu reizi" izmantojot apstiprinājumu (acknowledgments) un offsetu pārvaldības mehānismu.
Procesa izskatās šādi:
- Ražotājs nosūta ziņojumu uz Kafka un gaida apstiprinājumu no starpnieka (piemēram, ack=all — apstiprinājums no visām replikām).
- Ziņojums tiek saglabāts starpnieka žurnālā.
- Patērētājs lasa ziņojumu un pēc veiksmīgas apstrādes nosūta apstiprinājumu (commit) offsetam uz Kafka.
Ja patērētājs sabojājas pirms apstiprinājuma, tas, atsāknējoties, vēlreiz lasīs ziņojumu, nodrošinot "vismaz vienu reizi" piegādi.
Piemērs Go valodā ar sarama bibliotēku:
consumer, err := sarama.NewConsumerGroup(brokers, groupID, config)
// ...
// Ziņojumu apstrādes funkcijā:
func (h *handler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error {
for message := range claim.Messages() {
process(message) // ziņojuma apstrāde
sess.MarkMessage(message, "") // apstrādes apstiprinājums
}
return nil
}
Ja apstiprinājums netiek nosūtīts, ziņojums tiks piegādāts vēlreiz.