Giriş
Açıklaması şöyle. Yani amaç mesajın kaybolmaması, gerekirse iki defa da gelebilir
This delivery mechanism ensures that the message will be delivered to the consumer at least once, with a guarantee that no message should be lost. In the event of a failure or error during message delivery, the message will be redelivered. This comes with a possibility of duplicate message processing to be aware of.
Producer acknowledgement bekler. Açıklaması şöyle. Yani Producer acknowledgement beklediği için mesajın yazıldığından emin olur
Producer sends message synchronously or asynchronously and waits for acknowledgement (acks=1 or acks=all). This ensures messages are delivered successfully to the broker. In case the message delivery fails, the producer will retry.
Consumer açısında açıklaması şöyle.
Consumer fetches the messages and commits the offset only after processing the message successfully. If the consumer fails to process the message, it will fetch the message again, hence no message loss. However, it may happen the consumer successfully processes the message but fails to commit the offset. In this case, the consumer will fetch and process the message again upon restart, hence resulting in duplicates.
Consumer kodu şöyle
Properties props = new Properties(); props.setProperty("bootstrap.servers", "localhost:9092"); props.setProperty("group.id", "test"); props.setProperty("enable.auto.commit", "true"); props.setProperty("auto.commit.interval.ms", "1000"); KafkaConsumer<Integer, AvroMessage> consumer = new KafkaConsumer<>(props, new IntegerDeserializer(), new AvroMessageDeserializer()); consumer.subscribe(Arrays.asList("myavrotopic")); while (true) { ConsumerRecords<Integer, AvroMessage> records = consumer.poll(Duration.ofMillis(100)); for (ConsumerRecord<Integer, AvroMessage> record : records) { ... } }
1. Consumer Çökerse
Şeklen şöyle. Tüm mesajlar tekrar gelir. Çünkü poll işlemi ile gelen tüm mesajlar başarıyla işlendikten sonra commit yapılır
2. Consumer Exception Fırlatırsa
Şeklen şöyle. Consumer başarıyla işlenen mesajı commit'ler. Exception fırlatılan yerden devam edilir. Yani exception fırlatılmasına sebep olan mesaj tekrar gelir, ilave olarak ikinci okumada yeni mesajlar da gelir.
No comments:
Post a Comment