<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Streaming on foojay.io - Friends Of OpenJDK</title><link>http://foojayio.github.io/website/today/category/streaming/</link><description>Recent content in Streaming on foojay.io - Friends Of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 18 Aug 2026 20:04:38 +0000</lastBuildDate><atom:link href="http://foojayio.github.io/website/today/category/streaming/index.xml" rel="self" type="application/rss+xml"/><item><title>Idempotent Write Paths: Keeping an Integration Pipeline Correct When Messages Repeat</title><link>http://foojayio.github.io/website/today/idempotent-write-paths-keeping-an-integration-pipeline-correct-when-messages-repeat/</link><pubDate>Mon, 17 Aug 2026 06:46:00 +0000</pubDate><guid>http://foojayio.github.io/website/today/idempotent-write-paths-keeping-an-integration-pipeline-correct-when-messages-repeat/</guid><description>&lt;h2 id="a-reconciliation-that-didnt-add-up"&gt;A reconciliation that didn&amp;rsquo;t add up&lt;/h2&gt;&#10;&lt;p&gt;Let me start with a real one. After a big sales promo, during reconciliation, finance said a batch of orders had the wrong status: on our side it showed &amp;ldquo;paid&amp;rdquo;, but the finance system hadn&amp;rsquo;t booked it.&lt;/p&gt;&#10;&lt;p&gt;Tracing it back, we found the payment gateway had retried during its peak, and the same payment notification got pushed twice. The first one was processed normally; the second time it came, the consumer happened to be in the middle of a rolling restart, so the message got re-queued and consumed again.&lt;/p&gt;</description></item><item><title>When NOT TO USE Event-Driven Architecture (EDA)</title><link>http://foojayio.github.io/website/today/when-not-to-use-event-driven-architecture-eda/</link><pubDate>Sat, 11 Jul 2026 00:34:03 +0000</pubDate><guid>http://foojayio.github.io/website/today/when-not-to-use-event-driven-architecture-eda/</guid><description>&lt;h2 id="when-event-driven-architecture-is-not-the-right-choice"&gt;When Event-Driven Architecture Is Not the Right Choice&lt;/h2&gt;&#10;&lt;p&gt;Event-Driven Architecture (EDA) can help teams build scalable, loosely coupled and highly responsive distributed systems. Technologies such as Apache Kafka, RabbitMQ, Pulsar and cloud messaging platforms have made this architectural style increasingly popular.&lt;/p&gt;&#10;&lt;p&gt;However, EDA also introduces significant complexity. Asynchronous communication requires teams to manage retries, duplicate events, eventual consistency, schema evolution, observability and failure recovery. When these challenges are introduced without a clear business or technical need, an event-driven system can become harder to develop, operate and debug than a simpler synchronous architecture.&lt;/p&gt;</description></item><item><title>TestBox 7: Real-Time Feedback, a Browser-Based IDE, and Modern Testing Workflows on the JVM</title><link>http://foojayio.github.io/website/today/testbox-7-real-time-feedback-a-browser-based-ide-and-modern-testing-workflows-on-the-jvm/</link><pubDate>Tue, 24 Mar 2026 16:58:53 +0000</pubDate><guid>http://foojayio.github.io/website/today/testbox-7-real-time-feedback-a-browser-based-ide-and-modern-testing-workflows-on-the-jvm/</guid><description>&lt;p&gt;&lt;img src="http://foojayio.github.io/website/today/testbox-7-real-time-feedback-a-browser-based-ide-and-modern-testing-workflows-on-the-jvm/testbox-7-1-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;TestBox 7.x focuses on improving testing workflows for BoxLang and CFML applications. This release introduces improvements to the &lt;strong&gt;BoxLang CLI runner&lt;/strong&gt; , real-time &lt;strong&gt;streaming test execution via SSE&lt;/strong&gt; , &lt;strong&gt;dry run&lt;/strong&gt; capabilities, a browser-based &lt;strong&gt;TestBox RUN&lt;/strong&gt; interface, and several developer experience enhancements.&lt;/p&gt;&#10;&lt;p&gt;Check out the what&amp;rsquo;s new here: &lt;a href="https://testbox.ortusbooks.com/readme/release-history/whats-new-with-7.0.0" target="_blank" rel="noopener noreferrer"&gt;https://testbox.ortusbooks.com/readme/release-history/whats-new-with-7.0.0&lt;/a&gt;&lt;/p&gt;&#10;&lt;h4 id="testbox-run-a-browser-ide-for-your-tests"&gt;TestBox RUN: A Browser IDE for Your Tests&lt;/h4&gt;&#10;&lt;p&gt;&lt;img src="http://foojayio.github.io/website/today/testbox-7-real-time-feedback-a-browser-based-ide-and-modern-testing-workflows-on-the-jvm/image-700x155.png" alt="" width="700" height="155" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;The centerpiece of TestBox 7 is &lt;strong&gt;TestBox RUN&lt;/strong&gt; : a self-hosted, single-page web app (&lt;code&gt;bx/tests/index.bxm&lt;/code&gt;) that you drop into any &lt;strong&gt;BoxLang&lt;/strong&gt; project and open in a browser. No build toolchain. No external service. Just BoxLang.&lt;/p&gt;</description></item><item><title>Micrometer &amp; Prometheus in Spring Boot: Kafka Burger Orders</title><link>http://foojayio.github.io/website/today/micrometer-prometheus-in-spring-boot-kafka-burger-orders/</link><pubDate>Fri, 14 Nov 2025 10:13:03 +0000</pubDate><guid>http://foojayio.github.io/website/today/micrometer-prometheus-in-spring-boot-kafka-burger-orders/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;&#10;&#9;&#9;&#9;&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/eSreg0xPGqo?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;&#10;&#9;&#9;&lt;/div&gt;&#10;&#10;&lt;p&gt;👨‍💻 GitHub: &lt;a href="https://github.com/vinny59200/dukeburger" target="_blank" rel="noopener noreferrer"&gt;https://github.com/vinny59200/dukeburger&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;🔵⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪&lt;/p&gt;&#10;&lt;h2 id="tldr"&gt;TL;DR&lt;/h2&gt;&#10;&lt;p&gt;This guide shows how to use &lt;strong&gt;Micrometer and Prometheus in Spring Boot&lt;/strong&gt; to track a custom metric for a Kafka-driven Burger Orders app. You&amp;rsquo;ll post a burger order to a REST endpoint, publish it to Kafka, consume the topic, and increment a counter for all &amp;ldquo;DukeBurger&amp;rdquo; orders. Copy the snippets, run, and you&amp;rsquo;ll see your metric on &lt;code&gt;/actuator/prometheus&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>SpringBoot and Kafka Streams – Event Routing &amp; Testing</title><link>http://foojayio.github.io/website/today/spring-boot-kafka-streams-event-routing-testing/</link><pubDate>Thu, 19 Jun 2025 08:37:11 +0000</pubDate><guid>http://foojayio.github.io/website/today/spring-boot-kafka-streams-event-routing-testing/</guid><description>&lt;p&gt;Welcome to this hands-on guide to building a Spring Boot Kafka Streams application! (SpringBoot and Kafka Streams).&lt;/p&gt;&#10;&lt;p&gt;In this article, I&amp;rsquo;ll walk you through a project I built during the first day of a three-day Kafka Streams training. The goal? Validate sightseeing events in Lille based on predefined timetables and route the data accordingly.&lt;/p&gt;&#10;&lt;p&gt;Let&amp;rsquo;s explore how Kafka Streams powers a real-time city tour experience! 🧭&lt;/p&gt;&#10;&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;&#10;&#9;&#9;&#9;&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/s07d3SmoBMI?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;&#10;&#9;&#9;&lt;/div&gt;&#10;&#10;&lt;p&gt;🔵⚪⚪⚪⚪⚪⚪⚪⚪⚪&lt;/p&gt;</description></item><item><title>Real-time Stream Processing with Hazelcast and Redpanda</title><link>http://foojayio.github.io/website/today/when-speed-matters-real-time-stream-processing-with-hazelcast-and-redpanda/</link><pubDate>Tue, 25 Jul 2023 09:33:27 +0000</pubDate><guid>http://foojayio.github.io/website/today/when-speed-matters-real-time-stream-processing-with-hazelcast-and-redpanda/</guid><description>&lt;p&gt;In this tutorial, we explore the powerful combination of Hazelcast and Redpanda to build high-performance, scalable, and fault-tolerant applications that react to real-time data.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://redpanda.com/" target="_blank" rel="noopener noreferrer"&gt;Redpanda&lt;/a&gt; is a streaming data platform designed to handle high-throughput, real-time data streams. Compatible with Kafka APIs, Redpanda provides a highly performant and scalable alternative to Apache Kafka. Redpanda&amp;rsquo;s unique architecture enables it to handle millions of messages per second while ensuring low latency, fault tolerance, and seamless scalability.&lt;/p&gt;</description></item><item><title>Ingesting Data from Kafka into the QuestDB time-series database</title><link>http://foojayio.github.io/website/today/ingesting-time-series-events-from-kafka-into-questdb/</link><pubDate>Tue, 28 Mar 2023 09:38:35 +0000</pubDate><guid>http://foojayio.github.io/website/today/ingesting-time-series-events-from-kafka-into-questdb/</guid><description>&lt;p&gt;If you are working on a project with fast or streaming data, chances are Apache Kafka is already &lt;a href="https://kafka.apache.org/powered-by#:~:text=Today%2C%20Kafka%20is%20used%20by,80%25%20of%20the%20Fortune%20100." target="_blank" rel="noopener noreferrer"&gt;part of your pipeline&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;But if you want to analyse your data, you will need to ingest from Kafka into some destination.&lt;/p&gt;&#10;&lt;p&gt;For time-series data, QuestDB can be an excellent choice.&lt;/p&gt;&#10;&lt;p&gt;For those of you who are not yet familiar with &lt;a href="https://github.com/questdb/questdb" title="QuestDB" target="_blank" rel="noopener noreferrer"&gt;QuestDB&lt;/a&gt;, it is an Apache 2.0 licensed database designed for high throughput ingestion and fast SQL queries.&lt;/p&gt;</description></item><item><title>Failover Client with the Hazelcast Viridian Serverless</title><link>http://foojayio.github.io/website/today/how-to-create-a-failover-client-using-the-hazelcast-viridian-serverless/</link><pubDate>Fri, 24 Mar 2023 14:55:42 +0000</pubDate><guid>http://foojayio.github.io/website/today/how-to-create-a-failover-client-using-the-hazelcast-viridian-serverless/</guid><description>&lt;p&gt;Failover is an important feature of systems that rely on near-constant availability.&lt;/p&gt;&#10;&lt;p&gt;In Hazelcast, a failover client automatically redirects its traffic to a secondary cluster when the client cannot connect to the primary cluster.&lt;/p&gt;&#10;&lt;p&gt;Consider using a failover client with WAN replication as part of your disaster recovery strategy.&lt;/p&gt;&#10;&lt;p&gt;In this tutorial, you&amp;rsquo;ll update the code in a Java client to automatically connect to a secondary, failover cluster if it cannot connect to its original, primary cluster.&lt;/p&gt;</description></item><item><title>How to Get Started with the Hazelcast Viridian Serverless</title><link>http://foojayio.github.io/website/today/streaming-real-time-data-on-the-hazelcast-viridian-serverless/</link><pubDate>Fri, 10 Mar 2023 10:28:45 +0000</pubDate><guid>http://foojayio.github.io/website/today/streaming-real-time-data-on-the-hazelcast-viridian-serverless/</guid><description>&lt;p&gt;In this tutorial, you&amp;rsquo;ll learn how to build real-time streaming applications with the Hazelcast Viridian Serverless using SQL.&lt;/p&gt;&#10;&lt;p&gt;You&amp;rsquo;ll also learn how to build a materialized view from streaming data and contextual data in Hazelcast.&lt;/p&gt;&#10;&lt;p&gt;Streaming data is data that is continuously generated in small sizes.&lt;/p&gt;&#10;&lt;p&gt;Streaming data includes a wide variety of sources such as retail purchases, financial trades, or telemetry from connected vehicles.&lt;/p&gt;&#10;&lt;p&gt;This data isn&amp;rsquo;t usually useful by itself because of its size.&lt;/p&gt;</description></item><item><title>The evolution of APIs: From RESTful to Event-Driven</title><link>http://foojayio.github.io/website/today/the-evolution-of-apis-from-restful-to-event-driven/</link><pubDate>Thu, 23 Feb 2023 08:23:25 +0000</pubDate><guid>http://foojayio.github.io/website/today/the-evolution-of-apis-from-restful-to-event-driven/</guid><description>&lt;h2 id="history-of-services-and-apis"&gt;History of Services and APIs&lt;/h2&gt;&#10;&lt;p&gt;Enterprise application landscapes consist of inter-connected and inter-related applications.&lt;/p&gt;&#10;&lt;p&gt;The world of application integrations has been constantly evolving over several years.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="http://foojayio.github.io/website/today/the-evolution-of-apis-from-restful-to-event-driven/evol_APIs-700x284.png" alt="Evolution of APIs" width="700" height="284" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Over time, we&amp;rsquo;ve observed a trend towards more modular and data model-focused integration components, and an increased emphasis on real-time processing.&lt;/p&gt;&#10;&lt;p&gt;Beginning with EJBs in the 90s, progressing to Webservices and Service-Oriented Architecture (SOA) in the early 2000s, and finally evolving to domain-specific microservices, we are seeing a continual progression towards more efficient and effective integration solutions.&lt;/p&gt;</description></item><item><title>Announcing Real-time Stream Processing Unconference</title><link>http://foojayio.github.io/website/today/announcing-real-time-stream-processing-unconference/</link><pubDate>Tue, 07 Feb 2023 07:20:06 +0000</pubDate><guid>http://foojayio.github.io/website/today/announcing-real-time-stream-processing-unconference/</guid><description>&lt;p&gt;I&amp;rsquo;m happy to share &lt;a href="https://hazelcast.com/lp/unconference/" target="_blank" rel="noopener noreferrer"&gt;Hazelcast will be kicking off 2023&lt;/a&gt; by hosting #RTSPUnconf to connect with community members and industry experts on the Future of Real-Time Stream Processing.&lt;/p&gt;&#10;&lt;p&gt;Interested in joining our Stream Processing Fundamentals workshop in-person at CodeNode in London? Connect with other developers and receive a digital badge.&lt;/p&gt;&#10;&lt;p&gt;Sign-up here: &lt;a href="https://hazelcast.com/lp/unconference/" target="_blank" rel="noopener noreferrer"&gt;https://hazelcast.com/lp/unconference/&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Why Attend:&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Gain valuable insight into the future of real-time stream processing from industry experts and peers&lt;/li&gt;&#10;&lt;li&gt;Network and connect with like-minded professionals in the community through networking opportunities&lt;/li&gt;&#10;&lt;li&gt;To learn and enhance your skills in building real-time stream processing applications&lt;/li&gt;&#10;&lt;li&gt;Have an amazing time with new and old friends from the community!&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Are you interested in speaking or joining the Real-Time Stream Processing Roundtable?&lt;/p&gt;</description></item><item><title>Real-time Stream Processing with Hazelcast and StreamNative</title><link>http://foojayio.github.io/website/today/real-time-stream-processing-with-hazelcast-and-streamnative/</link><pubDate>Wed, 01 Feb 2023 09:09:04 +0000</pubDate><guid>http://foojayio.github.io/website/today/real-time-stream-processing-with-hazelcast-and-streamnative/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;&#10;&lt;p&gt;One of the most useful features of real-time stream processing is to combine the strengths and advantages of various technologies to provide a unique developer experience and an efficient way of processing data in real time at scale.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Hazelcast&lt;/strong&gt; is a real-time distributed computation and storage platform for consistently low latency queries, aggregation and stateful computation against real-time event streams and traditional data sources.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Apache Pulsar&lt;/strong&gt; is a real-time multitenant geo-replicated distributed pub-sub messaging and streaming platform for real-time workloads handling millions of events per hour.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;However, real-time stream processing is not an easy task, especially when combining multiple live streams with large volumes of data stored in external data storages to provide context and instant results.&lt;/p&gt;</description></item><item><title>Increasing Event Streaming with Kafka and Azul</title><link>http://foojayio.github.io/website/today/increasing-event-streaming-with-kafka-and-azul/</link><pubDate>Tue, 29 Mar 2022 13:41:48 +0000</pubDate><guid>http://foojayio.github.io/website/today/increasing-event-streaming-with-kafka-and-azul/</guid><description>&lt;p&gt;Welcome to getting started with &lt;a href="https://www.azul.com/products/prime/" target="_blank" rel="noopener noreferrer"&gt;Azul Platform Prime&lt;/a&gt; and &lt;a href="https://www.azul.com/technologies/kafka/" target="_blank" rel="noopener noreferrer"&gt;Apache Kafka&lt;/a&gt;!&lt;/p&gt;&#10;&lt;p&gt;In this article you will learn how to switch between two different Java runtime environments to run an Apache Kafka instance.&lt;/p&gt;&#10;&lt;p&gt;In later articles, this will allow you to compare runtime performance benchmarks.&lt;/p&gt;&#10;&lt;p&gt;Before we begin, let&amp;rsquo;s supply some context on Azul&amp;rsquo;s Platform offerings and Apache Kafka.&lt;/p&gt;&#10;&lt;h2 id="what-is-azul-platform-prime-and-platform-core"&gt;What is Azul Platform Prime and Platform Core?&lt;/h2&gt;&#10;&lt;p&gt;Azul offers two Java runtime environments &lt;a href="https://www.azul.com/products/prime/" target="_blank" rel="noopener noreferrer"&gt;Platform Prime&lt;/a&gt; and &lt;a href="https://www.azul.com/products/core/" target="_blank" rel="noopener noreferrer"&gt;Platform Core&lt;/a&gt;. Platform Prime (formerly known as Zing) is a high-performance implementation of the JVM (Java Virtual Machine) while Platform Core refers to Azul&amp;rsquo;s solution that includes the Zulu build of OpenJDK with dedicated support.&lt;/p&gt;</description></item></channel></rss>