Отключить тайм-аут сеанса Kafka - PullRequest
5 голосов
/ 17 марта 2019

Я пытаюсь пройтись по исходному коду Apache Camel, чтобы определить источник ошибки.Я продолжаю получать эту ошибку, несмотря на то, что настроил StringDeserializer для потребителя:

org.apache.kafka.common.errors.SerializationException: Can't convert key of class [B to class org.apache.kafka.common.serialization.StringSerializer specified in key.serializer
Caused by: java.lang.ClassCastException: [B cannot be cast to java.lang.String
    at org.apache.kafka.common.serialization.StringSerializer.serialize(StringSerializer.java:28)

Когда я пытаюсь пройти через Camel, чтобы попытаться выяснить, как десериализованная строка все еще заканчивается как байтовый массив,Верблюд продолжает отключаться, потому что Координатор считает, что Потребитель мертв:

20:45:04.171 [kafka-coordinator-heartbeat-thread | rtp-creditor-receive-payment] INFO  o.a.k.c.c.i.AbstractCoordinator - [Consumer clientId=consumer-1, groupId=rtp-creditor-receive-payment] Marking the coordinator rtp-demo-cluster-kafka-0.rtp-demo-cluster-kafka-brokers.rtp-reference.svc.cluster.local:9092 (id: 2147483647 rack: null) dead

Как мне полностью отключить все тайм-ауты, чтобы я мог просматривать исходный код, не беспокоясь о том, что потребитель будет помечен как мертвый?

1 Ответ

0 голосов
/ 08 апреля 2019

Хотя вы не можете отключить все тайм-ауты между кластером Kafka и его потребителями, вы можете изменить некоторые свойства на очень длинные:

  • group.max.session.timeout.ms - это максимальное время ожидания сеанса для любого потребителя,По умолчанию это пять минут.Установите в этом параметре максимальное целое число, например 2100000000, в файле свойств посредника, обычно называемом server.properties.
  • max.poll.interval.ms. Это похоже на тайм-аут сеанса и помечает потребителя как мертвого, еслив этом интервале нет опроса.Задайте для этого значения также значение меньше request.timeout.ms, например 1900000000.

В Apache Camel вы захотите установить следующие свойства:

  • consumerRequestTimeoutMs - это максимальное время ожидания ответа от клиента.Задайте для этого параметра значение 2000000000.
  • sessionTimeoutMs - вероятно, это время ожидания сеанса, которое помечает вашего потребителя как мертвого.Это должно быть установлено на значение меньше request.timeout.ms.Итак, что-то вроде 1900000000.

Может быть еще несколько, найденных здесь , любой с timeout или ms будет хорошим для просмотра.

...