我的用例: 使用Postman,我称之为Spring boot soap端点。端点创建KafkaProducer并向特定主题发送消息。我还有一个TaskScheduler来使用这个主题。
问题: 当调用soap将消息推送到主题时,我收到此错误:
2017-11-14 21:29:31.463 ERROR 6389 --- [ad |生产者-3] DomainEntityProducer:为1个记录过期 DomainEntityCommandStream-0:批量创建后已经过30030毫秒 加上逗留时间2017-11-14 21:29:31.464 ERROR 6389 --- [nio-8080-exec-6] DomainEntityProducer: org.apache.kafka.common.errors.TimeoutException:过期1条记录 对于DomainEntityCommandStream-0:批处理后已经过30030毫秒 创造加上逗留时间
以下是我用于推广主题的方法:
public DomainEntity push(DomainEntity pDomainEntity) throws Exception {
logger.log(Level.INFO, "streaming...");
wKafkaProperties.put("bootstrap.servers", "localhost:9092");
wKafkaProperties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
wKafkaProperties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
KafkaProducer wKafkaProducer = new KafkaProducer(wKafkaProperties);
ProducerRecord wProducerRecord = new ProducerRecord("DomainEntityCommandStream", getJSON(pDomainEntity));
wKafkaProducer.send(wProducerRecord, (RecordMetadata r, Exception e) -> {
if (e != null) {
logger.log(Level.SEVERE, e.getMessage());
}
}).get();
return pDomainEntity;
}
使用命令shell脚本
./ kafka-console-producer.sh --broker-list 10.0.1.15:9092 --topic DomainEntityCommandStream
和
./ kafka-console-consumer.sh --boostrap-server 10.0.1.15:9092 --topic DomainEntityCommandStream - 从头开始
效果很好。
在Stackoverflow上查看一些相关问题,我试图清除主题:
./ kafka-topics.sh --zookeeper 10.0.1.15:9092 --alter --topic DomainEntityCommandStream --config retention.ms = 1000
查看kafka日志,我发现保留时间已经改变。
但是,没有运气,我也得到同样的错误。
有效负载非常小,为什么要更改batch.size?
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:gs="http://soap.problem.com">
<soapenv:Header/>
<soapenv:Body>
<gs:streamDomainEntityRequest>
<gs:domainEntity>
<gs:name>12345</gs:name>
<gs:value>Quebec</gs:value>
<gs:version>666</gs:version>
</gs:domainEntity>
</gs:streamDomainEntityRequest>
</soapenv:Body>
</soapenv:Envelope>
答案 0 :(得分:0)
使用Docker和Kafka 0.11.0.1映像,您需要在容器中添加以下环境参数:
KAFKA_ZOOKEEPER_CONNECT = X.X.X.X:XXXX(您的Zookeeper IP或域:PORT默认值为2181)
KAFKA_ADVERTISED_HOST_NAME = X.X.X.X(您的kafka IP或域)
KAFKA_ADVERTISED_PORT = XXXX(您的kafka端口号默认为9092)
可选:
KAFKA_BROKER_ID = 999(某些值)
KAFKA_CREATE_TOPICS = test:1:1(一些在开始时要创建的主题名称)
如果它不起作用,并且您仍然收到相同的消息(“自XXXXX开始,X记录已过期:自创建批处理以来已经过XXXXX毫秒,而且还有较长时间”),您可以尝试从Zookeeper中清除kafka数据。