KafkaKRU Meetup Review
· 6分の読み時間
KafkaKRU 밋업 리뷰: Event Sourcing부터 리더 파티션 밸런싱까지
2024년 11월 21일, 서울 중구 삼화타워에서 열린 KafkaKRU 밋업에 참석했습니다. 사실 대기자 명단에 있었어서 참석이 어려운 상태였던 것 같지만, 열정으로 봐주셔서 다행히 쫓겨나지는 않았습니다. 결과적으로는 예상을 훨씬 뛰어넘는 값진 시간이었어요.
2024년 11월 21일, 서울 중구 삼화타워에서 열린 KafkaKRU 밋업에 참석했습니다. 사실 대기자 명단에 있었어서 참석이 어려운 상태였던 것 같지만, 열정으로 봐주셔서 다행히 쫓겨나지는 않았습니다. 결과적으로는 예상을 훨씬 뛰어넘는 값진 시간이었어요.
この記事を書く前にDockerを使ってKafkaをインストールしましたが、その内容はここでは扱いません。
Spring Batchでは、Kafkaトピックからデータを処理するためにKafkaItemReader
が提供されています。
簡単なバッチジョブを作成してみましょう。
まず、必要な依存関係を追加します。
dependencies {
...
implementation 'org.springframework.boot:spring-boot-starter-batch'
implementation 'org.springframework.kafka:spring-kafka'
...
}
application.yml
にKafkaの設定を行います。
spring:
kafka:
bootstrap-servers:
- localhost:9092
consumer:
group-id: batch
@Slf4j
@Configuration
@RequiredArgsConstructor
public class KafkaSubscribeJobConfig {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
private final KafkaProperties kafkaProperties;
@Bean
Job kafkaJob() {
return jobBuilderFactory.get("kafkaJob")
.incrementer(new RunIdIncrementer())
.start(step1())
.build();
}
@Bean
Step step1() {
return stepBuilderFactory.get("step1")
.<String, String>chunk(5)
.reader(kafkaItemReader())
.writer(items -> log.info("items: {}", items))
.build();
}
@Bean
KafkaItemReader<String, String> kafkaItemReader() {
Properties properties = new Properties();
properties.putAll(kafkaProperties.buildConsumerProperties());
return new KafkaItemReaderBuilder<String, String>()
.name("kafkaItemReader")
.topic("test") // 1.
.partitions(0) // 2.
.partitionOffsets(new HashMap<>()) // 3.
.consumerProperties(properties) // 4.
.build();
}
}
KafkaProperties
は、SpringでKafkaを便利に使用するためのさまざまな公開インターフェースを提供します。
さて、バッチジョブを実行すると、application.yml
の情報に基づいてconsumer groups
が自動的に作成され、ジョブがトピックの購読を開始します。
kafka console producer
を使って、test
トピックに1から10までのデータを追加してみましょう。
kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
バッチジョブがトピックを正常に購読していることがわかります。
chunkSize
を5に設定したので、データは5件ずつバッチ処理されます。
ここまで、Spring BatchでのKafkaItemReader
の基本的な使い方を見てきました。次に、テストコードの書き方を見てみましょう。