禁用卡夫卡会话超时

时间:2019-03-17 20:47:18

标签: apache-kafka apache-camel

我正在尝试遍历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以找出反序列化后的String仍然如何以字节数组结尾时,Camel会继续关闭自身,因为协调器认为Consumer已死:​​

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 :(得分:0)

尽管您不能禁用Kafka集群及其使用者之间的所有超时,但是您可以将一些属性修改为非常长:

  • <textarea class="form-control" style=" min-width:500px; max-width:100%;min-height:50px;height:100%;width:100%;" ></textarea> -这是任何使用者的最大会话超时。默认值为五分钟。在通常名为group.max.session.timeout.ms的代理属性文件中,将其设置为最大整数左右,例如2100000000
  • server.properties-这类似于会话超时,如果在此时间间隔内没有轮询,则将使用方标记为死亡。还将其设置为小于max.poll.interval.ms的值,例如request.timeout.ms

在Apache Camel中,您需要设置以下属性:

  • 1900000000-这是等待客户端响应的最长时间。将此设置为consumerRequestTimeoutMs
  • 2000000000-这很可能是会话超时,将您的消费者标记为死亡。应将其设置为小于sessionTimeoutMs的值。因此,类似request.timeout.ms

可能还有更多found here,任何带有1900000000timeout的东西都是不错的选择。