我正在使用Kafka connect版本confluentinc/cp-kafka-connect:5.1.1-1
。
卡夫卡集群kafka_2.11-0.11.0.3
(3个经纪人)
这个kafka集群可以通过Spark Stream与旧的生产者/消费者一起正常工作。
现在我尝试添加kafka connect,但出现以下错误:
ERROR Uncaught exception in herder work thread, exiting:
(org.apache.kafka.connect.runtime.distributed.DistributedHerder)
org.apache.kafka.common.errors.TimeoutException: Timeout of 60000ms expired before the position for partition kc-offsets-22 could be determined
我可以看到该主题存在。我什至可以使用以下命令来编写和阅读该主题:
./kafka-console-producer.sh \
--broker-list `hostname`:9092 \
--topic kc-offsets \
--property "parse.key=true" \
./kafka-console-consumer.sh --zookeeper $KAFKA_ZOOKEEPER_CONNECT --topic kc-offsets --from-beginning --property print.key=true
kafka连接机器已连接到我所有的经纪人。
但是由于某种原因,kafka连接将无法启动。
我将非常感谢有关如何进行调查/解决的任何建议
更新: 我已尝试按照建议的here将副本更改为1,但没有帮助
答案 0 :(得分:0)
该错误表明某些记录以比从客户端发送记录更快的速度放入队列。
当您的生产者(在这种情况下为Kafka Connect)发送消息时,它们会存储在缓冲区中(在将消息发送给目标代理之前),并且记录会被分组在一起以提高吞吐量。将新记录添加到批处理时,必须在request.timeout.ms
控制的可配置时间窗口内发送记录(默认设置为30秒)。如果批处理在队列中放置的时间较长,则会抛出TimeoutException
,然后将批处理记录从队列中删除,并且不会传递给代理。
增加request.timeout.ms
的值应该可以解决这个问题。
如果此方法不起作用,您还可以尝试减少batch.size
,以使批次发送的频率更高(但是这次将包含较少的消息),并确保linger.ms
设置为0(这是默认值)。
如果仍然出现错误,我认为您的网络出现了问题。您启用了SSL吗?
答案 1 :(得分:0)
我找到了该问题的根本原因,我们的 __ consumer_offsets 主题已损坏。 在使用kafka-connect之前,我们使用的是老式消费者,所以我们没有看到这个问题。 对我们来说,解决方案是创建新的kafka集群,从而解决了该问题。
顺便说一句,要使该主题正常运行,只需阅读以下内容:
./kafka-console-consumer.sh --zookeeper $KAFKA_ZOOKEEPER_CONNECT --topic __consumer_offsetss --from-beginning --property print.key=true