シンプルなストリームアプリケーションの構築
Kafka Streamsを利用してイベントをリアルタイムに処理・変換する、基本的なSpring Bootアプリケーションを開発します。
「シンプルなストリームアプリケーションの構築」はCoddyKit上の無料Advanced Spring Boot 4: Event-Driven Architecture (Kafka)レッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAdvanced Spring Boot 4: Event-Driven Architecture (Kafka)学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Advanced Spring Boot 4: Event-Driven Architecture (Kafka)コースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
Your First Stream App
Welcome! In this lesson, we'll build a basic Spring Boot application that uses Kafka Streams to process events in real-time.
Our goal is simple: read messages from one Kafka topic, transform them, and write the results to another topic.
Spring Boot Project Setup
To begin, create a new Spring Boot project using Spring Initializr (start.spring.io).
Make sure to include these dependencies:
- Spring Web (for a web context, though not strictly needed for streams)
- Spring for Apache Kafka
- Kafka Streams
Essential Stream Properties
Kafka Streams applications need some core properties to function. These are typically set in your application.properties or as a @Bean.
Key properties include:
application.id: A unique ID for your stream application.bootstrap.servers: The Kafka broker addresses.default.key.serde: Serializer/Deserializer for message keys.default.value.serde: Serializer/Deserializer for message values.
Activating Stream Processing
For Spring Boot to recognize and manage your Kafka Streams application, you need to annotate your main application class with @EnableKafkaStreams.
This annotation tells Spring to look for stream topology definitions and manage their lifecycle.
package com.coddykit.kafka.streams;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.kafka.annotation.EnableKafkaStreams;
@SpringBootApplication
@EnableKafkaStreams // This enables Kafka Streams
public class SimpleStreamApplication {
public static void main(String[] args) {
SpringApplication.run(SimpleStreamApplication.class, args);
}
}Kafka Streams Configuration Bean
You can define a @Bean of type KafkaStreamsConfiguration to configure your stream application. This is often preferred over application.properties for more complex setups.
Here, we set essential properties like the application ID and Kafka broker address:
package com.coddykit.kafka.streams;
import org.apache.kafka.common.serialization.Serdes;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.annotation.KafkaStreamsDefaultConfiguration;
import org.springframework.kafka.config.KafkaStreamsConfiguration;
import java.util.HashMap;
import java.util.Map;
import static org.apache.kafka.streams.StreamsConfig.*;
@Configuration
public class KafkaStreamsConfig {
@Bean(name = KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_CONFIG_BEAN_NAME)
public KafkaStreamsConfiguration kStreamsConfigs() {
Map<String, Object> props = new HashMap<>();
props.put(APPLICATION_ID_CONFIG, "my-uppercase-app");
props.put(BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put(DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
props.put(DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
return new KafkaStreamsConfiguration(props);
}
}Building Your Stream Topology
The StreamsBuilder is your primary tool for defining the processing logic, or 'topology', of your Kafka Streams application.
Spring automatically injects an instance of StreamsBuilder into any @Bean method that defines your stream topology.
Defining the Stream Source
To start processing, you need to define where your stream gets its data. This is done by creating a KStream from an input topic.
The stream() method of StreamsBuilder does exactly this:
KStream<String, String> stream = kStreamBuilder.stream("input-topic");Here, we're reading messages with String keys and String values from input-topic.
Transforming and Sending Data
Once you have a KStream, you can apply various transformations. For our simple app, we'll convert message values to uppercase using mapValues().
Finally, we'll send the transformed messages to an output-topic using the to() method. Try running this example!
package com.coddykit.kafka.streams;
import org.apache.kafka.common.serialization.Serdes;
import org.apache.kafka.streams.StreamsBuilder;
import org.apache.kafka.streams.kstream.KStream;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.kafka.annotation.EnableKafkaStreams;
import org.springframework.kafka.annotation.KafkaStreamsDefaultConfiguration;
import org.springframework.kafka.config.KafkaStreamsConfiguration;
import java.util.HashMap;
import java.util.Map;
import static org.apache.kafka.streams.StreamsConfig.*;
@SpringBootApplication
@EnableKafkaStreams
public class SimpleStreamApplication {
public static void main(String[] args) {
System.out.println("Starting SimpleStreamApplication...");
SpringApplication.run(SimpleStreamApplication.class, args);
}
@Bean(name = KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_CONFIG_BEAN_NAME)
public KafkaStreamsConfiguration kStreamsConfigs() {
Map<String, Object> props = new HashMap<>();
props.put(APPLICATION_ID_CONFIG, "uppercase-stream-app");
props.put(BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put(DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
props.put(DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
return new KafkaStreamsConfiguration(props);
}
@Bean
public KStream<String, String> kStream(StreamsBuilder kStreamBuilder) {
KStream<String, String> stream = kStreamBuilder.stream("input-topic");
stream.mapValues(String::toUpperCase)
.to("output-topic");
System.out.println("Kafka Stream 'uppercase-stream-app' topology built!");
return stream;
}
}Testing Your Stream App
To see your application in action:
- Ensure a Kafka broker is running (e.g., via Docker).
- Run this Spring Boot application.
- Use a Kafka console producer to send messages to
input-topic. - Use a Kafka console consumer to read messages from
output-topicand observe the uppercase transformation.
Stream Concepts Quick Check
Which of the following is the primary purpose of the application.id configuration in a Kafka Streams application?
Recap: Building Stream Apps
Great job! You've learned how to build a basic Kafka Streams application with Spring Boot:
- Configured essential Kafka Streams properties.
- Used
@EnableKafkaStreamsto activate stream processing. - Defined a stream topology using
StreamsBuilder, including reading from a source topic, applying transformations, and writing to a sink topic.
This foundation will help you build more complex real-time data processing pipelines!
AI チューターと学ぶ Advanced Spring Boot 4: Event-Driven Architecture (Kafka) — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 12
- レッスン
- 48
よくある質問
「シンプルなストリームアプリケーションの構築」レッスンは無料ですか?
はい。「シンプルなストリームアプリケーションの構築」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Advanced Spring Boot 4: Event-Driven Architecture (Kafka)コースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Advanced Spring Boot 4: Event-Driven Architecture (Kafka)コースには全4レッスンが含まれています。
「シンプルなストリームアプリケーションの構築」で何を学びますか?
Kafka Streamsを利用してイベントをリアルタイムに処理・変換する、基本的なSpring Bootアプリケーションを開発します。 ブラウザで直接実行するハンズオンコードでAdvanced Spring Boot 4: Event-Driven Architecture (Kafka)を演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Advanced Spring Boot 4: Event-Driven Architecture (Kafka)を始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAdvanced Spring Boot 4: Event-Driven Architecture (Kafka)は初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「シンプルなストリームアプリケーションの構築」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAdvanced Spring Boot 4: Event-Driven Architecture (Kafka)レッスンでコードを書いて実行できますか?
はい。すべてのAdvanced Spring Boot 4: Event-Driven Architecture (Kafka)レッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Kafka Streams入門
- KStreamとKTableによるストリーム処理
- シンプルなストリームアプリケーションの構築
- Kafka Streamsのウィンドウ処理とステートフル集計