java - Spring Batch Kafka Kafka 到数据库作业
问题描述
我需要一个 spring-batch ItemReader 来使用 Kafka 消息,这些消息的结果需要进一步处理和写入。
这是我实现的一个项目阅读器:
public abstract class KafkaItemReader<T> implements ItemReader<List<T>> {
public abstract KafkaConsumer<String, T> getKafkaConsumer();
public abstract String getTopic();
public abstract long getPollingTime();
@Override
public List<T> read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
Iterator<ConsumerRecord<String, T>> iterator = getKafkaConsumer()
.poll(Duration.ofMillis(getPollingTime()))
.records(getTopic())
.iterator();
List<T> records = new ArrayList<>();
while (iterator.hasNext()) {
records.add(iterator.next().value());
}
return records;
}
}
这些是春季批处理作业和步骤的以下bean:
@Bean
public ItemWriter<List<DbEntity>> databaseWriter(DataSource dataSource) {
//some item writer that needs to be implmented
return null;
}
@Bean
public Step kafkaToDatabaseStep(KafkaItemReader kafkaItemReader, //implementation of KafkaItemReader
StepBuilderFactory stepBuilderFactory,
DataSource dataSource) {
return stepBuilderFactory
.get("kafkaToDatabaseStep")
.allowStartIfComplete(true)
.<List<KafkaRecord>, List<DbEntity>>chunk(100)
.reader(kafkaItemReader)
.processor(itemProcessor()) //List<KafkaRecord> to List<DbEntity> converter
.writer(databaseWriter(dataSource))
.build();
}
@Bean
public Job kafkaToDatabaseJob(
@Qualifier("kafkaToDatabaseStep") Step step) {
return jobBuilderFactory.get("kafkaToDatabaseJob")
.incrementer(new RunIdIncrementer())
.flow(step)
.end()
.build();
}
这里我不知道:
- 如何提交写入器中读取消息的偏移量,因为我只想在完成记录处理后提交。
- 如何在我的场景中使用 JdbcBatchItemWriter 作为 ItemWriter。
解决方案
即将推出的 Spring Batch v4.2 GA 将支持读取/写入数据到 Apache Kafka 主题。您已经可以在4.2.0.M2 版本中试用了。
您还可以查看 Josh Long 的Spring Tips 一期。
推荐阅读
- c - Execve() 添加了两个额外的参数
- javascript - NodeJS - 回调函数中的断言没有失败 Mocha 单元测试
- node.js - 为什么我收到此 Facebook Passport oauth2 响应错误?
- keycloak - Keycloak 注册 - 未正确拾取自定义用户属性值
- r - assign() 仅用于数组的一张 - 避免手动更改
- r - 不同变量的线性图
- python - 在 Python 中将图像 3 通道深度转换为 1 通道的快速方法?
- java - 访问二维数组的元素时出现问题(仅生成一列)。- 爪哇
- nginx - 带有配置片段的 kubernetes nginx 入口错误
- delphi - 如何将包含 TPngImage 的 TImage 保存为位图文件?