我正在尝试遍历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
如何完全禁用所有超时,以便可以单步执行源代码,而不必担心使用者被标记为已死?
答案 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,任何带有1900000000
或timeout
的东西都是不错的选择。