![](/img/trans.png)
[英]Spring-Kafka Consumer Group Coordination for ConcurrentKafkaListenerContainerFactory
[英]kafka restabilizing group using spring kafka consumer
我的用戶使用速度很慢,可能需要5分鍾以上才能處理記錄。 我要避免的是讓卡夫卡重新建立團隊。 為了實現此目的,我必須將以下屬性設置為kafka經紀人:
group.max.session.timeout.ms = 3600001
group.min.session.timeout.ms = 3600000
在我的應用程序端,我有以下配置:
@Bean
public Map<String, Object> consumerConfigs() {
final Map<String, Object> propsMap = new HashMap<>();
propsMap.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,
environment.getProperty("app.kafkaBrokers"));
propsMap.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, true);
propsMap.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, "100");
propsMap.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, Integer.valueOf(environment.getProperty("app.session.timeout.ms")) );
propsMap.put(ConsumerConfig.REQUEST_TIMEOUT_MS_CONFIG, Integer.valueOf(environment.getProperty("app.session.timeout.ms")) + 1 );
propsMap.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
propsMap.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
propsMap.put(ConsumerConfig.GROUP_ID_CONFIG, "group1");
propsMap.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest");
return propsMap;
}
@Bean
KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory() {
final ConcurrentKafkaListenerContainerFactory<String, String> factory =
new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
factory.setConcurrency(9);// was 3
factory.getContainerProperties().setPollTimeout(3000);
return factory;
}
而且在我的聽眾中,我有:
@KafkaListener(id = "baz", topics = "tipJobsForExecution", containerFactory="kafkaListenerContainerFactory")
public void listen(ConsumerRecord<?, ?> record)
我的聽眾需要大約5分鍾來處理消息。 完成后,我在kafka經紀人那邊閱讀了以下內容:
2018-05-03 10:29:11,210]信息[GroupCoordinator 0]:准備與22代老一代重新平衡組baz(__consumer_offsets-7)(kafka.coordinator.group.GroupCoordinator)
據我了解,kafka認為消費者死亡並重新平衡了群體。 我的問題是為什么會這樣? 我的一個想法是,也許心跳並不是每隔3000ms就會進行一次心跳,但我不知道這會帶來多大的麻煩。
預先感謝,吉安尼斯
您必須了解Kafka使用者的三種超時配置參數。
heartbeat.interval.ms-使用Kafka的群組管理工具時,到達消費者協調員的心跳之間的預期時間。 通常應為會話的1/3超時值默認值-3000毫秒
session.timeout.ms-如果代理在此會話超時之前未收到任何心跳信號,則代理將從該使用者中刪除此使用者並啟動重新平衡。默認值為10000
max.poll.interval.ms-如果在此超時到期前未調用poll(),則認為使用方失敗,該組將重新平衡默認值-300000
在您的情況下,輪詢間隔似乎設置為太低的值。
參考-https: //kafka.apache.org/documentation/#newconsumerconfigs
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.