25
Queryable State for Kafka Streams / @laclefyoshi / [email protected]

Queryable State for Kafka Streamsを使ってみた

Embed Size (px)

Citation preview

Page 1: Queryable State for Kafka Streamsを使ってみた

Queryable State for Kafka Streams

/ @laclefyoshi / [email protected]

Page 2: Queryable State for Kafka Streamsを使ってみた

• • Kafka Streams • State for Kafka Streams • Queryable State for Kafka Streams • •

2

Page 3: Queryable State for Kafka Streamsを使ってみた

• 2011/04

• 2015/09

• • Druid (KDP, 2015)

• RDB NoSQL ( , 2016; : HBase )

• ESP8266 Wi-Fi IoT (KDP, 2016)

• • (DEIM 2014)

• (WebDB Forum 2014)

• Spark Streaming (Spark Meetup December 2015)

• Kafka AWS Kinesis (Apache Kafka Meetup Japan #1; 2016)

• (FutureOfData; 2016)

3

Page 4: Queryable State for Kafka Streamsを使ってみた

Apache Storm

PipelineDB

Druid

Apache Kafka

4

Page 5: Queryable State for Kafka Streamsを使ってみた

Apache Storm

Memcached

Redis

Apache Kafka

5

Page 6: Queryable State for Kafka Streamsを使ってみた

Apache Kafka

6

Page 7: Queryable State for Kafka Streamsを使ってみた

Kafka

7

Page 8: Queryable State for Kafka Streamsを使ってみた

Apache Kafka Version 0.10.1.0

• New Features • [KAFKA-1464] - Add a throttling option to the Kafka replication tool • [KAFKA-3176] - Allow console consumer to consume from

particular partitions when new consumer is used. • [KAFKA-3492] - support quota based on authenticated user name • [KAFKA-3776] - Unify store and downstream caching in streams • [KAFKA-3858] - Add functions to print stream topologies • [KAFKA-3909] - Queryable state for Kafka Streams • [KAFKA-4015] - Change cleanup.policy config to accept a list of

valid policies • [KAFKA-4093] - Cluster id

8

Page 9: Queryable State for Kafka Streamsを使ってみた

Kafka Streams

• Version 0.10.0.0

• Kafka API

9

Page 10: Queryable State for Kafka Streamsを使ってみた

Kafka Streams

Stateless transformations Stateful transformations

10

Page 11: Queryable State for Kafka Streamsを使ってみた

State for Kafka Streams

• Stateful transformations

11

Page 12: Queryable State for Kafka Streamsを使ってみた

State

• Kafka Streams

• 2

• State Store RocksDB

• Kafka StateChangelog

• Kafka Streams

• Key Value

• Window12

Page 13: Queryable State for Kafka Streamsを使ってみた

• Record Stream

• Changelog Stream

• State (Table)

Record Changelog State

13

Page 14: Queryable State for Kafka Streamsを使ってみた

Queryable State for Kafka Streams

• Version 0.10.1.0

• State Store API

14

Page 15: Queryable State for Kafka Streamsを使ってみた

Queryable State

• ReadOnlyKeyValueStore • Window Streams State

• Key

• Value

• ReadOnlyWindowStore • Window Streams State

• Key, From (Long), To (Long)

• Iterator<KeyValue<Long, Value>>

15

Page 16: Queryable State for Kafka Streamsを使ってみた
Page 17: Queryable State for Kafka Streamsを使ってみた

Kafka Streams

• Stateful transformations count

KafkaStreams streams = null; KStreamBuilder builder = new KStreamBuilder(); KStream<String, String> textLines = builder.stream(stringSerde, stringSerde, inputStream); KStream<String, Long> wordCounts = textLines .flatMapValues(value -> ...) .groupBy((key, word) -> word) .count(storeName) .toStream(); wordCounts.to(stringSerde, longSerde, outputStream); streams = new KafkaStreams(builder, conf);

17

Page 18: Queryable State for Kafka Streamsを使ってみた

Queryable State Streams

• Streams o.a.k.streams.KafkaStreams

KafkaStreams streams = ...;

String key = "kafka"; ReadOnlyKeyValueStore<String, Long> store = streams.store( storeName, QueryableStoreTypes.<String, Long>keyValueStore()); Long value = store.get(key); return value;

18

Page 19: Queryable State for Kafka Streamsを使ってみた

Queryable State Streams

• API

KafkaStreams streams = ...;

get("/results/:key", (req, res) -> { String key = req.params(":key"); ReadOnlyKeyValueStore<String, Long> store = streams.store( storeName, QueryableStoreTypes.<String, Long>keyValueStore()); Long value = store.get(key); return value; });

19

Page 20: Queryable State for Kafka Streamsを使ってみた

github:laclefyoshi/kafka_streams_example

Page 21: Queryable State for Kafka Streamsを使ってみた

Apache Kafka

21

HTTP

Page 22: Queryable State for Kafka Streamsを使ってみた

$ java -cp target/kafka_streams_example-1.0-SNAPSHOT.jar \ org.saekiyoshiyasu.App kafka -> null ... kafka -> 5

$ ./bin/kafka-console-producer.sh --topic input-stream \ --broker-list 127.0.0.1:9092 What is Kafka good for? ...

22

Page 23: Queryable State for Kafka Streamsを使ってみた

Queryable State for Kafka Streams

Kafka Streams ?

23

Page 24: Queryable State for Kafka Streamsを使ってみた

Queryable State for Kafka Streams

Kafka Streams ?

State

24

Page 25: Queryable State for Kafka Streamsを使ってみた

• Queryable State

• Kafka Streams

25