From 6756a8175230ba5e2a915faf69f2e1ac0225bf55 Mon Sep 17 00:00:00 2001 From: nehruraghav Date: Thu, 29 Aug 2024 17:41:34 -0700 Subject: [PATCH] Added streams push gateway blog post --- _posts/2024-08-29-streams-push-gateway.md | 300 ++++++++++++++++++ .../streams-push-gateway-architecture.png | Bin 0 -> 52158 bytes 2 files changed, 300 insertions(+) create mode 100644 _posts/2024-08-29-streams-push-gateway.md create mode 100755 assets/blog-images/streams-push-gateway/streams-push-gateway-architecture.png diff --git a/_posts/2024-08-29-streams-push-gateway.md b/_posts/2024-08-29-streams-push-gateway.md new file mode 100644 index 0000000000..63a528afe1 --- /dev/null +++ b/_posts/2024-08-29-streams-push-gateway.md @@ -0,0 +1,300 @@ +--- +layout: post +title: "Kafka Streams Push Gateway" +authors: raghav +categories: [Platform Engineering, Infrastructure, Kafka, Kafka Streams, Web Socket, API Gateway, Kong] +image: assets/blog-images/streams-push-gateway/streams-push-gateway-architecture.png +featured: false +hidden: false +teaser: Kafka Streams Push Gateway +toc: true +--- + +# Introduction +Organizations like DoorDash/UberEats/Swiggy/Zomato that take orders from customers and use an operational database to store the orders and keep updating the status of the orders. Status update needs to be visible for customers to make sure that they know what is happening to their orders (e.g., order accepted, order in progress, order ready for delivery, order is on route, and order is delivered, among the many possible states). hello + +# What’s needed to Implement this System? +To send these updates to customers (possibly hundreds or thousands per second), they need to get the updates from their suppliers (Kitchens, Restaurants), update their operational database, capture the changes (Change Data Capture or CDC) into a Kafka Topic, have consumers read the records in the Kafka Topic, sift through the ones that need to be updated, maintain connections to the customers and send the updates. In doing all this, they need to make sure that they take care of failures that occur during the updates (possibly using durable execution via Temporal Workflows and Activities). + +## Illustrative Steps to Implementing Real-Time Order Updates +1. Centralize Data: Store all relevant order data in a Kafka topic. +2. Schema Management: Ensure the data in Kafka has a well-defined schema. +3. Stream Processing: Develop a Kafka Streams application to process updates as they become available. +4. Key Mapping: Implement a mechanism to map topics/partitions to orders/users. +5. Stream Topology: Define a stream topology with a GroupBy key operation, repartition the topic, and make the data accessible via a web interface. +6. Client Communication: Implement a polling or asynchronous mechanism (like WebSockets) to push updates to clients. + + +# Our Solution - Steams Push Gateway Accelerator +We have built a system that takes care of automatically subscribing to updates related to specific data present in the records/messages in the Kafka Topic and routing them to the subscribers. + +
+flowchart TD + +%% Subgraphs for better organization + + +subgraph KC[Kafka Cluster] + T1(Kafka Topic 1) + P1(Partition 1) + P2(Partition 2) + P3(Partition 3) +end + +subgraph Application1 + APP1[Kafka Streams Application] + REST1[REST Endpoint] + STORE1[RocksDB Store] + APP1 -->|reads/stores data| STORE1 + REST1 --> APP1 +end + +subgraph Application2 + APP2[Kafka Streams Application] + REST2[REST Endpoint] + STORE2[RocksDB Store] + APP2 -->|reads/stores data| STORE2 + REST2 --> APP2 +end + +subgraph SA[Streams Applications] + Application1 + Application2 +end + +subgraph API_Gateway + API[Kong API Gateway] +end + +subgraph Clients + CLIENTS[Client] +end + +%% Edge connections between nodes + +API -->|forwards requests| REST1 +CLIENTS -->|request updates for specific keys| API +APP1 -->|sends updates via Upgraded Websocket connection| CLIENTS + +API -->|forwards requests| REST2 +APP2 -->|sends updates via Upgraded Websocket connection| CLIENTS + +%% Connection between Kafka brokers and Kafka streams applications +T1 -->|partitioned data| P1 +T1 -->|partitioned data| P2 +T1 -->|partitioned data| P3 +P1 -->|reads data| APP2 +P2 -->|reads data| APP1 +P3 -->|reads data| APP1 + +APP1 <-->|forward requests| REST2 +APP2 <-->|forward requests| REST1 + + %% Styling + classDef kafkaStyle fill:#e0f7e9,stroke:#4caf50,stroke-width:2px; + class K1,K2 kafkaStyle; + classDef default font-size:16px; +
+ +## Overview of the System + +### Order Updates Flow +1. ***Order Service***: Publishes updates to a database containing customer_id and order_id. +2. ***CDC Integration***: A Kafka Connect application captures CDC updates and writes them to a Kafka topic. +3. ***Kafka Streams Application***: Consumes this data, groups it by key fields (e.g., order_id or customer_id), and stores it locally after performing a GroupBy operation. + +### Client Communication +1. A mobile application requests updates for a specific order via an API Gateway, which forwards the request to the Kafka Streams application. +2. The connection is upgraded to a WebSocket, through which the Kafka Streams application sends regular updates (configurable interval) back to the client. + +### API Gateway +1. The API Gateway handles authentication, authorization, and request/response transformations. +2. It provides load balancing by routing calls to different Kafka Streams Application instances, ensuring even distribution of traffic and avoiding single points of failure. + +## API Gateway +API Gateway (we recommend and use Kong that) can do the authentication. Also, provide load balancing to route the calls to a different Kafka Streams Application through an upstream (which is a Kong construct for load balancing across multiple targets with each target consisting of the hostname:port). + +Refer the [upstreams](https://docs.konghq.com/gateway/latest/key-concepts/upstreams/) documentation from Kong to create the upstream. + +## Kafka Streams Application +The Kafka Streams application consists of: +1. ***Declarative Configuration***: Specifies the Kafka bootstrap servers, application ID, state store location, input/output topics, and keys for the GroupBy operation. +2. ***REST Endpoint***: Configured as an upstream target for the API Gateway, enabling other Kafka Streams instances to query keys not present in their local store. +3. ***Stream Topology***: Manages the GroupBy operation for the specified key (e.g., order_id). +4. ***WebSocket Communication***: Upgrades incoming connections to WebSocket and publishes updates. +5. ***Data Routing***: Routes requests to the correct host if the requested key is not available locally. + +### Declarative configuration +The Kafka Streams Application can use the below declarative configuration which will be used to start the application. + +```yaml + kafka: + bootstrap-servers: localhost:9092 + streams: + application-id: kafka-streams-app + default-key-serde: org.apache.kafka.common.serialization.Serdes$StringSerde + default-value-serde: org.apache.kafka.common.serialization.Serdes$StringSerde + properties: + commit.interval.ms: 1000 + cache.max.bytes.buffering: 10485760 + state-dir: /tmp/kafka-streams + + consumer: + group-id: kafka-streams-group + auto-offset-reset: earliest + + producer: + retries: 3 + batch-size: 16384 + buffer-memory: 33554432 + +topics: + input-topic: orders + output-topic: orders-by-key + +application: + stream: + group-by-key-enabled: true + group-by-key-operation: + # the key could be any field within the record and can be + # addressed using a format like ‘orders.items.item_id’ + key: order_id + description: Group orders by their key (e.g., order ID or customer ID) + +update: + interval:5000 + description: Send updates to clients periodically using the interval (5000 means 5 seconds) +``` + + +## REST Endpoint +1. Retrieve the status of an order using the endpoint: /update/orders/{order_id}. +2. Implemented using Spring Boot and integrated into the Kafka Streams Application. + + +### Web Socket Implementation + +The ```WebSocketConfig``` configuration class registers the handler and the path to listen to. + +```java +@Configuration +@EnableWebSocket +public class WebSocketConfig implements WebSocketConfigurer { + private final KeyValueHandler keyValueHandler; + + @Autowired + public WebSocketConfig(KeyValueHandler keyValueHandler) { + this.keyValueHandler = keyValueHandler; + } + + @Override + public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { + registry.addHandler(keyValueHandler, "/update/orders/{key}") + .addInterceptors(new KeyValueInterceptor()) + .setAllowedOrigins("*"); + } +} +``` + +We implement the logic to retrieve the data (only relevant methods are shown here) +```java +private void sendMessage(WebSocketSession session) throws IOException { + String key = (String) session.getAttributes().get("key"); + + final HostStoreInfo hostStoreInfo = streamsMetadataForStoreAndKey(storeName, key); + if (!thisHost(hostStoreInfo)){ + session.sendMessage(new TextMessage(fetchByKey(hostStoreInfo, "update/orders/"+ key).toString())); + } + + final ReadOnlyKeyValueStore store = + kafkaStreams.store(fromNameAndType(storeName, QueryableStoreTypes.keyValueStore())); + if (store == null) { + throw new NotFoundException(); + } + + // Get the value from the store + final String value = store.get(key); + if (value == null) { + throw new NotFoundException(); + } + session.sendMessage(new TextMessage(new KeyValueBean(key, value).toString())); +} +``` + +Retrieve the data from the host that has the actual data (routing to a different host) +```java +private boolean thisHost(final HostStoreInfo host) { + return host.getHost().equals(hostInfo.host()) && + host.getPort() == hostInfo.port(); +} + +private KeyValueBean fetchByKey(final HostStoreInfo host, final String path) { + String url = String.format("http://%s:%d/%s", host, port, path); + + // Make the GET request + ResponseEntity response = restTemplate.getForEntity(url, KeyValueBean.class); + + // Return the body of the response + return response.getBody(); +} + +public HostStoreInfo streamsMetadataForStoreAndKey(final String store, + final String key) { + return metadataService.streamsMetadataForStoreAndKey(store, key, new StringSerializer()); +} +``` + +### Client +The client could be a mobile application that makes a connection to the Kafka Streams application via the API Gateway. The connection gets upgraded to a web socket connection and the data is received at regular intervals (configured in the streams application). Once the client has received all the updates, it can close the connection. + +### Websocket payload and response + +A HTTP Get connection is upgraded to a Web Socket Secure (WSS) connection. The payload structure of a WebSocket message depends on the protocol and use case. Here’s an example of a WebSocket request payload in JSON format, which is common in many real-time applications. + +Client to Server (Requesting Order Updates for a specific Order id) +```json +{ + "type": "order_status_updates_request", + "data": { + "order_id": "12345" + } +} +``` + +Server to Client (Sending Order Updates) +```json +{ + "type": "order_status_update", + "data": { + "order_id": "12345", + "status": "Shipped", + "estimated_delivery": "2024-08-28", + "tracking_number": "1Z999AA10123456784" + } +} +``` + +Wscat commands with Basic Authentication (handled by the API Gateway) +```bash +echo -n "username:password" | base64 +# Assume that the base64 encoding results in “dXNlcm5hbWU6cGFzc3dvcmQ=” + +# call the order updates api via the Kong API gateway with basic authentication +wscat -c "wss://localhost:8000/update/orders" -H "Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=" +``` + +After the successful connection, send +```json +{ + "type": "order_updates_request", + "order_id": "12345" +} +``` + +# Conclusion +The Streams Push Gateway Accelerator leverages Kafka Streams, RESTful endpoints, and WebSockets to deliver a robust, scalable solution for pushing real-time order updates to clients. By integrating with an API Gateway and employing efficient stream processing techniques, this solution ensures that customers receive timely updates on their orders, enhancing the user experience. + +Please contact us at [hello@platformatory.com](mailto:hello@platformatory.com) to discuss your use case and we would be happy to help! + +# References + Confluent Kafka Streams Interactive Queries: [Link](https://docs.confluent.io/platform/current/streams/developer-guide/interactive-queries.html) \ No newline at end of file diff --git a/assets/blog-images/streams-push-gateway/streams-push-gateway-architecture.png b/assets/blog-images/streams-push-gateway/streams-push-gateway-architecture.png new file mode 100755 index 0000000000000000000000000000000000000000..090cc2e6417fc3b9de305e2f66a4c3edb3a9d6e6 GIT binary patch literal 52158 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