#spring-boot #apache-kafka #kafka-consumer-api
Вопрос:
У меня есть приложение spring boot, действующее как потребитель. Наше приложение Spring Boot работает в приложении AWS Beanstalk.
У нас есть брокеры Кафки, работающие в другом кластере K8.
Мы настроили всех доступных брокеров в нашем приложении.
Теперь проблема в том, что всякий раз, когда мы меняем количество экземпляров вручную или когда балансировщик нагрузки изменяет экземпляры в зависимости от трафика, соединение приложения с брокерами прерывается и оно перестает получать сообщения. Все наши потребители замолкают, и отставание потребителей продолжает расти. Мы должны вручную повторно развернуть приложение снова.
Я не уверен, что здесь может быть не так. Я делюсь конфигурацией для нашего потребителя:
# Impression F-Cap Kafka Configs impression.fcap.kafka.producer.configurations.bootstrap.servers=${KAFKA_BROKERS:http://localhost:9092} impression.fcap.kafka.producer.configurations.client.id=${IMPRESSION_FCAP_KAFKA_PRODUCER_CLIENT_ID:ad-tech-impression-freq-cap-processor} impression.fcap.kafka.producer.configurations.acks=all impression.fcap.kafka.producer.configurations.key.serializer=org.apache.kafka.common.serialization.StringSerializer impression.fcap.kafka.consumer.configurations.bootstrap.servers=${GM_KAFKA_BROKERS:http://localhost:9092} impression.fcap.kafka.consumer.configurations.client.id=${IMPRESSION_FCAP_KAFKA_CONSUMER_CLIENT_ID:ad-tech-impression-freq-cap-processor} impression.fcap.kafka.consumer.configurations.group.id=${IMPRESSION_FCAP_CONSUMER_GROUP:impression-freq-cap-consumer} impression.fcap.kafka.consumer.configurations.max.poll.records=500 impression.fcap.kafka.consumer.configurations.max.poll.interval.ms=2147483647 impression.fcap.kafka.consumer.configurations.key.deserializer=org.apache.kafka.common.serialization.StringDeserializer impression.fcap.kafka.consumer.dlqConfigurations.bootstrap.servers=${KAFKA_BROKERS:http://localhost:9092} impression.fcap.kafka.consumer.dlqConfigurations.client.id=${IMPRESSION_FCAP_KAFKA_DLQ_CONSUMER_CLIENT_ID:ad-tech-impression-freq-cap-dlq-processor} impression.fcap.kafka.consumer.dlqConfigurations.group.id=${IMPRESSION_FCAP_KAFKA_DLQ_CONSUMER_GROUP:impression-freq-cap-dlq-consumer} impression.fcap.kafka.consumer.dlqConfigurations.auto.offset.reset=earliest # Kafka Client Common Configs kafka.client.common.topics.click-banner-enriched=${CLICK_BANNER_ENRICHED:adtech.event.click.banner.enriched} kafka.client.common.topics.click-banner-enriched-dlq=${CLICK_BANNER_ENRICHED_DLQ:adtech.event.click.banner.enriched.ad-tech-click-freq-cap-processor.dlq} kafka.client.common.topics.widget-serve-audit-log=${WIDGET_SERVE_AUDIT_LOG:trigger.external.widget.audit.serve} kafka.client.common.topics.widget-serve-audit-log-dlq=${WIDGET_SERVE_AUDIT_LOG_DLQ:trigger.external.widget.audit.serve.ad-tech-impression-freq-cap-processor.dlq} kafka.producer.retry.max.attempts=${KAFKA_PRODUCER_RETRY_MAX_ATTEMPTS:5} kafka.producer.retry.first.backoff.millis=${KAFKA_PRODUCER_RETRY_FIRST_BACKOFF_MILLIS:5000} kafka.producer.retry.max.backoff.millis=${KAFKA_PRODUCER_RETRY_MAX_BACKOFF_MILLIS:30000}
Комментарии:
1. Как долго потребители молчат? Навсегда? Если он изменяет количество потребителей в одной и той же группе потребителей, происходит перебалансировка. В процессе восстановления баланса потребители не могут потреблять какие-либо сообщения. Еще один вопрос,.. где находится балансировщик нагрузки? Потребители или брокеры?
2. Потребители @J. Song молчат вечно, пока мы не развернем приложение заново. Когда я говорю о балансировщиках нагрузки, я имею в виду баланс нагрузки на потребительское приложение, поэтому lb находится на стороне потребителя.