Interactive queries in Kafka - Mini Project: Build & Apply
KStream named purchases from the topic purchase-events with key type String and value type String.Use builder.stream("purchase-events") to create the stream.
Properties object named props and set the StreamsConfig.APPLICATION_ID_CONFIG property to "purchase-count-app".Use props.put(StreamsConfig.APPLICATION_ID_CONFIG, "purchase-count-app").
purchases stream to create a KTable<String, Long> named purchaseCounts that counts the number of purchases per product key using groupByKey() and count().Use purchases.groupByKey().count() to create the count table.
KafkaStreams streams = new KafkaStreams(builder.build(), props); and streams.start(). Then, use streams.store() with QueryableStoreTypes.keyValueStore() to get the ReadOnlyKeyValueStore<String, Long> named store. Finally, print the count for the product key "product-123" using store.get("product-123").Use streams.store() with QueryableStoreTypes.keyValueStore() and then store.get("product-123").
Practice
What is the main purpose of interactive queries in Kafka Streams?
Solution
Step 1: Understand interactive queries concept
Interactive queries allow reading live state from Kafka Streams state stores.Step 2: Identify the main use case
The main use is to get real-time data from the app without extra databases.Final Answer:
To read live state data directly from the Kafka Streams application -> Option CQuick Check:
Interactive queries = read live state [OK]
- Confusing interactive queries with writing data
- Thinking it creates topics
- Assuming it monitors brokers
Which of the following is the correct way to get a state store named myStore of type ReadOnlyKeyValueStore in Kafka Streams?
Solution
Step 1: Recall Kafka Streams store retrieval syntax
The correct method is streams.store(storeName, storeType.class) in Java.Step 2: Match the correct syntax
store = streams.store("myStore", ReadOnlyKeyValueStore.class); uses streams.store with class type, which is correct method name and syntax.Final Answer:
store = streams.store("myStore", ReadOnlyKeyValueStore.class); -> Option AQuick Check:
Use streams.store with class type [OK]
- Using streams.getStore instead of streams.store
- Omitting .class for type
- Passing type without .class
Given the following code snippet in a Kafka Streams app, what will be the output if the key "user123" exists with value "active" in the state store?
var store = streams.store("userStatusStore", ReadOnlyKeyValueStore.class);
var status = store.get("user123");
System.out.println(status);Solution
Step 1: Understand store.get(key) behavior
The get method returns the value for the key if it exists, else null.Step 2: Check given key and value
Since "user123" exists with value "active", store.get("user123") returns "active".Final Answer:
"active" -> Option BQuick Check:
store.get(existingKey) = value [OK]
- Assuming null is returned even if key exists
- Expecting exceptions on missing keys
- Confusing syntax causing compile errors
Identify the error in this Kafka Streams interactive query code snippet:
var store = streams.store("ordersStore", ReadOnlyKeyValueStore.class);
var order = store.get(12345);
System.out.println(order);Solution
Step 1: Check method to get state store
The method streams.store is correct.Step 2: Validate key type and store type
Key type mismatch: passing integer 12345 instead of string key (common for ordersStore).Final Answer:
Passing integer key instead of string key -> Option AQuick Check:
Key type must match store definition [OK]
- Passing int literal without quotes for string keys
- Assuming key type must be string always
- Ignoring exception handling (not mandatory here)
You want to build a real-time dashboard that shows the current count of active users using Kafka Streams interactive queries. Which approach best fits this requirement?
Solution
Step 1: Identify real-time state storage method
Kafka Streams state stores hold live data accessible via interactive queries.Step 2: Choose best approach for live dashboard
Using ReadOnlyKeyValueStore allows querying current counts directly without extra DB.Final Answer:
Use a ReadOnlyKeyValueStore to store user statuses and query counts live -> Option DQuick Check:
Interactive queries + state store = real-time dashboard [OK]
- Relying on external DB instead of state store
- Polling Kafka consumer instead of querying store
- Using local variables which are not shared state
Ready to prove it?
Pass the test and this pattern moves unknown
