Apache camel 带Spring文件库的Camel kafka
我试图将卡夫卡偏移量保存到文件中,我使用Spring boot,似乎偏移量正在写入文件,但没有读取,因此事实上camel将在重新启动时从卡夫卡主题的开头开始读取Apache camel 带Spring文件库的Camel kafka,apache-camel,spring-camel,Apache Camel,Spring Camel,我试图将卡夫卡偏移量保存到文件中,我使用Spring boot,似乎偏移量正在写入文件,但没有读取,因此事实上camel将在重新启动时从卡夫卡主题的开头开始读取 @Component public class Route extends RouteBuilder { @Override public void configure() throws Exception { from(kafka()) .to("log:TEST?level=INFO")
@Component
public class Route extends RouteBuilder {
@Override
public void configure() throws Exception {
from(kafka())
.to("log:TEST?level=INFO")
.process(Route::commitKafka);
}
private String kafka() {
String kafkaEndpoint = "kafka:";
kafkaEndpoint += "topic";
kafkaEndpoint += "?brokers=";
kafkaEndpoint += "localhost:9092";
kafkaEndpoint += "&groupId=";
kafkaEndpoint += "TEST";
kafkaEndpoint += "&autoOffsetReset=";
kafkaEndpoint += "earliest";
kafkaEndpoint += "&autoCommitEnable=";
kafkaEndpoint += false;
kafkaEndpoint += "&allowManualCommit=";
kafkaEndpoint += true;
kafkaEndpoint += "&offsetRepository=";
kafkaEndpoint += "#fileStore";
return kafkaEndpoint;
}
@Bean(name = "fileStore")
private FileStateRepository fileStateRepository() {
FileStateRepository fileStateRepository = FileStateRepository.fileStateRepository(new File("/kafka/offset_repo/repo.dat"));
// This will be empty
// System.out.println(fileStateRepository.getCache());
return fileStateRepository;
}
private static void commitKafka(Exchange exchange) {
KafkaManualCommit manual = exchange.getIn().getHeader(KafkaConstants.MANUAL_COMMIT, KafkaManualCommit.class);
manual.commitSync();
}
}
我终于找到了一个解决方案,但它没有出现在文档中,必须调用start方法在启动时初始化repo
@Bean(name = "fileStore")
private FileStateRepository fileStateRepository() {
FileStateRepository fileStateRepository = FileStateRepository.fileStateRepository(new File("/kafka/offset_repo/repo.dat"));
try {
fileStateRepository.start();
} catch (Exception e) {
e.printStackTrace();
}
return fileStateRepository;
}