我们正在使用我们的Servicetest和嵌入式Kafka观察一个奇怪的行为。春季Kafka,使用嵌入式Kafka测试
测试是斯波克测试中,我们使用JUnit的规则KafkaEmbedded和传播brokersAsString如下:
@ClassRule
@Shared
KafkaEmbedded embeddedKafka = new KafkaEmbedded(1)
@Autowired
KafkaListenerEndpointRegistry endpointRegistry
def setupSpec() {
System.setProperty("kafka.bootstrapServers", embeddedKafka.getBrokersAsString())
}
从检查KafkaEmbedded的代码,用构造一个实例会导致一个卡夫卡服务器有两个分区每题。
为了解决测试中分区分配和服务器 - 客户端同步问题,我们按照从spring-kafka的ContainerTestUtils类中看到的策略。
public static void waitForAssignment(KafkaMessageListenerContainer container, int partitions)
throws Exception {
log.info(
"Waiting for " + container.getContainerProperties().getTopics() + " to connect to " + partitions + " " +
"partitions.")
int n = 0;
int count = 0;
while (n++ < 600 && count < partitions) {
count = 0;
container.getAssignedPartitions().each {
TopicPartition it ->
log.info(it.topic() + ":" + it.partition() + "; ")
}
if (container.getAssignedPartitions() != null) {
count = container.getAssignedPartitions().size();
}
if (count < partitions) {
Thread.sleep(100);
}
}
}
当我们观察,我们注意到以下模式日志:
2016-07-29 11:24:02.600 WARN 1160 --- [afka-consumer-1] org.apache.kafka.clients.NetworkClient : Error while fetching m