![](/img/trans.png)
[英]Multiple consumers based on consumer record key in spring boot kafka
[英]Spring Boot based Kafka Consumer Acknowledgement policy
我們有一個基於 Sprring-Boot 的 Kaffka 消費者,我們為此創建了一個工廠,如下所示:-
@Bean
public ConsumerFactory<String, Customer> customerConsumerFactory() {
Map<String, Object> config = new HashMap<>();
config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "bootstrapServers");
config.put(ConsumerConfig.GROUP_ID_CONFIG, "${kafka.customer.consumer.group}");
config.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
config.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, JsonDeserializer.class);
config.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false);
config.put(ConsumerConfig.HEARTBEAT_INTERVAL_MS_CONFIG, "5000");
config.put(ConsumerConfig.REQUEST_TIMEOUT_MS_CONFIG, "5000");
config.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG,"25000");
config.put(ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG,String.valueOf(Integer.MAX_VALUE));
config.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, "2");
return new DefaultKafkaConsumerFactory<>(config, new StringDeserializer(),
new JsonDeserializer<>(PaymentsHubResponse.class));
}
@Bean
public ConcurrentKafkaListenerContainerFactory<String, Customer> customerConsumerKafkaListenerFactory() {
ConcurrentKafkaListenerContainerFactory<String, Customer> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(customerConsumerFactory());
return factory;
}
通過上述配置,我們打算在一次輪詢中,該消費者最多讀取 2 條記錄,並且我們有手動確認策略。 現在,這里是消費者的代碼看起來像: -
@KafkaListener(topics = "${kafka.consumer.topic}", groupId = "${kafka.consumer.group}", containerFactory="customerConsumerKafkaListenerFactory")
public void consumeResponseEventFromPH(Customer customerObject, Acknowledgment ack) {
acknowledgment.acknowledge();
// Business Logic.
}
問題 1.) 這個語句acknowledgment.acknowledge();
向 Kafka 代理發送兩個消息的確認,或者此方法本身是否會執行 2 次,每個傳入消息執行一次?
問題 2.) 如果在處理這些消息的過程中出現問題怎么辦? 這些信息會永遠丟失嗎?
問題 3.) 有沒有辦法在每個消息級別發送條件確認?
問題 4.) 說,我從不承認信息? 那么,有多少次,這條消息會從經紀人那里再次傳來?
問題 5.) 這兩個 consumerConfig 屬性MAX_POLL_RECORDS_DOC
和MAX_POLL_RECORDS_CONFIG
什么區別?
答案將不勝感激。
- 謝謝阿迪亞
只有當容器確認模式為MANUAL
(在處理完兩個偏移后都提交)或MANUAL_IMMEDIATE
每個偏移被立即提交(同步或異步取決於commitSync
屬性)時,您才會收到Acknowledgment
。
取決於版本; 對於舊版本,錯誤只是被記錄下來。 對於最新版本,默認錯誤處理程序是SeekToCurrentErrorHandler
。 默認情況下,將無延遲地嘗試交付 10 次,然后記錄。 您可以配置在重試用盡后調用恢復器(例如DeadLetterPublishingRecoverer
。
不; Kafka 只維護一個偏移量; 不承認離散記錄。
除非您拋出異常(參見 2),否則它不會被重新交付。 請參閱有關錯誤處理的參考手冊。 https://docs.spring.io/spring-kafka/docs/current/reference/html/#annotation-error-handling
一個 (_DOC) 是屬性文檔的文本,另一個 (_CONFIG) 是屬性名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.