<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: DeltaStream</title>
    <description>The latest articles on DEV Community by DeltaStream (@deltastream).</description>
    <link>https://dev.to/deltastream</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F7066%2Fca4056eb-322f-417a-95a9-8f375c652b86.png</url>
      <title>DEV Community: DeltaStream</title>
      <link>https://dev.to/deltastream</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/deltastream"/>
    <language>en</language>
    <item>
      <title>Enable “Shift-Left” with Apache Kafka and Iceberg</title>
      <dc:creator>kelsey-deltastream</dc:creator>
      <pubDate>Tue, 22 Apr 2025 17:25:42 +0000</pubDate>
      <link>https://dev.to/deltastream/enable-shift-left-with-apache-kafka-and-iceberg-5f0i</link>
      <guid>https://dev.to/deltastream/enable-shift-left-with-apache-kafka-and-iceberg-5f0i</guid>
      <description>&lt;p&gt;In the past few years, the &lt;a href="https://iceberg.apache.org/" rel="noopener noreferrer"&gt;Apache Iceberg&lt;/a&gt; table format has become the 800-pound gorilla in the data space. DeltaStream supports reading and writing Iceberg using either the AWS Glue catalog or the &lt;a href="https://polaris.apache.org/" rel="noopener noreferrer"&gt;Apache Polaris (incubating)&lt;/a&gt; catalog. This blog walks you through a data scenario in which data in &lt;a href="https://kafka.apache.org/" rel="noopener noreferrer"&gt;Apache Kafka&lt;/a&gt; topics are read, filtered, and enriched with data from another Kafka topic, then written to Iceberg and queried from DeltaStream. &lt;/p&gt;

&lt;h2&gt;
  
  
  Writing Data Tables to Iceberg
&lt;/h2&gt;

&lt;p&gt;When you sign up for a &lt;a href="https://console.deltastream.io/" rel="noopener noreferrer"&gt;DeltaStream&lt;/a&gt; demo, you’re provided with a demo Kafka cluster called &lt;em&gt;trial_store&lt;/em&gt;. If you are unfamiliar with DeltaStream, this &lt;a href="https://deltastream.storylane.io/share/yybzjzjt7fce" rel="noopener noreferrer"&gt;short interactive demo&lt;/a&gt; walks you through it. For the Iceberg catalog implementation, we’ll be using REST and the Snowflake Polaris implementation, the docs for which can be found &lt;a href="https://other-docs.snowflake.com/opencatalog/tutorials/open-catalog-gs" rel="noopener noreferrer"&gt;here&lt;/a&gt;. AWS Glue is also supported, as is any other REST implementation.&lt;/p&gt;

&lt;p&gt;For this example, we’ll use two of the topics in that cluster and follow the first part of the &lt;a href="https://docs.deltastream.io/getting-started/trial-quick-start" rel="noopener noreferrer"&gt;Quick Start&lt;/a&gt; guide, but we’ll enhance it to write two new tables of processed data to Iceberg.&lt;/p&gt;

&lt;p&gt;Our demo includes the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users Kafka topic&lt;/li&gt;
&lt;li&gt;Pageviews Kafka topic&lt;/li&gt;
&lt;li&gt;Enrich the pageviews with user information &lt;/li&gt;
&lt;li&gt;Write to two tables in Iceberg, comprised of:

&lt;ul&gt;
&lt;li&gt;Pageviews per city per minute&lt;/li&gt;
&lt;li&gt;Pageviews per user per hour&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Our queries do the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Top 3 cities with highest pageviews per hour&lt;/li&gt;
&lt;li&gt;Top 5 users with the highest pageviews per hour&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffktqugreqthrstlpiaqd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffktqugreqthrstlpiaqd.png" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Streaming Lakehouse with DeltaStream Fusion
&lt;/h2&gt;

&lt;p&gt;First, let’s define the data we are working with. Our Kafka topic &lt;em&gt;pageviews&lt;/em&gt; looks like this:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
    “key”: {&lt;br&gt;
        “userid”: “User_5”&lt;br&gt;
    },&lt;br&gt;
    “value”: {&lt;br&gt;
        “viewtime”: 1742335218442,&lt;br&gt;
        “userid”: “User_5”,&lt;br&gt;
        “pageid”: “Page_67”&lt;br&gt;
    }&lt;br&gt;
}&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="24" height="24"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
{
2. 
"key": {
3. 
"userid": "User\_5"
4. 
},
5. 
"value": {
6. 
"viewtime": 1742335218442,
7. 
"userid": "User\_5",
8. 
"pageid": "Page\_67"
9. 
}
10. 
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That means we need to create a DeltaStream, Stream-type Object.  We do this with a CSAS statement:&lt;/p&gt;

&lt;p&gt;CREATE STREAM pageviews (&lt;br&gt;
    viewtime BIGINT, &lt;br&gt;
    userid VARCHAR, &lt;br&gt;
    pageid VARCHAR&lt;br&gt;
)WITH (&lt;br&gt;
    ‘topic’=’pageviews’, &lt;br&gt;
    ‘value.format’=’JSON’&lt;br&gt;
);&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="24" height="24"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
CREATE STREAM pageviews (
2. 
 viewtime BIGINT, 
3. 
 userid VARCHAR, 
4. 
 pageid VARCHAR
5. 
)WITH (
6. 
'topic'='pageviews', 
7. 
'value.format'='JSON'
8. 
);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That now sets up our &lt;em&gt;pageviews&lt;/em&gt; topic so you can access it via SQL. Let’s look at the data structure in our &lt;em&gt;users&lt;/em&gt; topic. Note that a &lt;em&gt;userid&lt;/em&gt; field will tie the two streams together.&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
    “key”: {&lt;br&gt;
        “userid”: “User_2”&lt;br&gt;
    },&lt;br&gt;
    “value”: {&lt;br&gt;
        “registertime”: 1742597129390,&lt;br&gt;
        “userid”: “User_2”,&lt;br&gt;
        “regionid”: “Region_9”,&lt;br&gt;
        “gender”: “OTHER”,&lt;br&gt;
        “interests”: [&lt;br&gt;
            “News”,&lt;br&gt;
            “Movies”&lt;br&gt;
        ],&lt;br&gt;
        “contactinfo”: {&lt;br&gt;
            “phone”: “6503889999”,&lt;br&gt;
            “city”: “Palo Alto”,&lt;br&gt;
            “state”: “CA”,&lt;br&gt;
            “zipcode”: “94301”&lt;br&gt;
        }&lt;br&gt;
    }&lt;br&gt;
}&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="24" height="24"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
{
2. 
"key": {
3. 
"userid": "User\_2"
4. 
},
5. 
"value": {
6. 
"registertime": 1742597129390,
7. 
"userid": "User\_2",
8. 
"regionid": "Region\_9",
9. 
"gender": "OTHER",
10. 
"interests": [
11. 
"News",
12. 
"Movies"
13. 
],
14. 
"contactinfo": {
15. 
"phone": "6503889999",
16. 
"city": "Palo Alto",
17. 
"state": "CA",
18. 
"zipcode": "94301"
19. 
}
20. 
}
21. 
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, we define a DeltaStream Changelog object for our &lt;em&gt;users&lt;/em&gt; topic named &lt;em&gt;users_log&lt;/em&gt;. Note that we’ve created an array from &lt;em&gt;interests&lt;/em&gt; and a struct from the &lt;em&gt;contactinfo&lt;/em&gt;. Also note that &lt;em&gt;state&lt;/em&gt; is a reserved word in DeltaStream, so it is enclosed in quotes. Our command looks like this:&lt;/p&gt;

&lt;p&gt;CREATE CHANGELOG users_log (&lt;br&gt;
    registertime BIGINT, &lt;br&gt;
    userid VARCHAR, &lt;br&gt;
    regionid VARCHAR, &lt;br&gt;
    gender VARCHAR, &lt;br&gt;
    interests ARRAY, &lt;br&gt;
    contactinfo STRUCT, &lt;br&gt;
    PRIMARY KEY(userid)&lt;br&gt;
)WITH (&lt;br&gt;
    ‘topic’=’users’, &lt;br&gt;
    ‘key.format’=’json’, &lt;br&gt;
    ‘key.type’=’STRUCT’, &lt;br&gt;
    ‘value.format’=’json’&lt;br&gt;
);&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="24" height="24"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
CREATE CHANGELOG users\_log (
2. 
 registertime BIGINT, 
3. 
 userid VARCHAR, 
4. 
 regionid VARCHAR, 
5. 
 gender VARCHAR, 
6. 
 interests ARRAY&amp;lt;VARCHAR&amp;gt;, 
7. 
 contactinfo STRUCT&amp;lt;phone VARCHAR, city VARCHAR, "state" VARCHAR, zipcode VARCHAR&amp;gt;, 
8. 
 PRIMARY KEY(userid)
9. 
)WITH (
10. 
'topic'='users', 
11. 
'key.format'='json', 
12. 
'key.type'='STRUCT&amp;lt;userid VARCHAR&amp;gt;', 
13. 
'value.format'='json'
14. 
);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, we join our STREAM and CHANGELOG into a new enriched Kafka topic defined as a DeltaStream STREAM object named &lt;em&gt;csas_enriched_pv&lt;/em&gt;. This combines user data with the pageviews information that is written to our Iceberg table.&lt;/p&gt;

&lt;p&gt;CREATE STREAM csas_enriched_pv AS &lt;br&gt;
SELECT &lt;br&gt;
    TO_TIMESTAMP_LTZ(viewtime, 3) AS viewtime,&lt;br&gt;&lt;br&gt;
    p.userid AS userid, &lt;br&gt;
    pageid, &lt;br&gt;
    TO_TIMESTAMP_LTZ(registertime, 3) AS registertime, &lt;br&gt;
    regionid, &lt;br&gt;
    gender, &lt;br&gt;
    interests, &lt;br&gt;
    Contactinfo -&amp;gt; city as user_city,&lt;br&gt;
    Contactinfo -&amp;gt; “state” as user_state&lt;br&gt;
FROM pageviews p&lt;br&gt;
    JOIN users_log u ON u.userid = p.userid;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="24" height="24"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
CREATE STREAM csas\_enriched\_pv AS 
2. 
SELECT 
3. 
 TO\_TIMESTAMP\_LTZ(viewtime, 3) AS viewtime,
4. 
 p.userid AS userid, 
5. 
 pageid, 
6. 
 TO\_TIMESTAMP\_LTZ(registertime, 3) AS registertime, 
7. 
 regionid, 
8. 
 gender, 
9. 
 interests, 
10. 
 Contactinfo -&amp;gt; city as user\_city,
11. 
 Contactinfo -&amp;gt; "state" as user\_state
12. 
FROM pageviews p
13. 
 JOIN users\_log u ON u.userid = p.userid;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is what that data looks like for reference:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
    “key”: {&lt;br&gt;
        “userid”: “User_5”&lt;br&gt;
    },&lt;br&gt;
    “value”: {&lt;br&gt;
        “viewtime”: “2025-03-24 21:18:23.526Z”,&lt;br&gt;
        “userid”: “User_5”,&lt;br&gt;
        “pageid”: “Page_22”,&lt;br&gt;
        “registertime”: “2025-03-24 21:18:23.232Z”,&lt;br&gt;
        “regionid”: “Region_1”,&lt;br&gt;
        “gender”: “MALE”,&lt;br&gt;
        “interests”: [&lt;br&gt;
            “News”,&lt;br&gt;
            “Movies”&lt;br&gt;
        ],&lt;br&gt;
            “user_city”: “Irvine”,&lt;br&gt;
        “user_state”: “CA”&lt;br&gt;
    }&lt;br&gt;
}&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="24" height="24"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
{
2. 
"key": {
3. 
"userid": "User\_5"
4. 
},
5. 
"value": {
6. 
"viewtime": "2025-03-24 21:18:23.526Z",
7. 
"userid": "User\_5",
8. 
"pageid": "Page\_22",
9. 
"registertime": "2025-03-24 21:18:23.232Z",
10. 
"regionid": "Region\_1",
11. 
"gender": "MALE",
12. 
"interests": [
13. 
"News",
14. 
"Movies"
15. 
],
16. 
"user\_city": "Irvine",
17. 
"user\_state": "CA"
18. 
}
19. 
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now that the Kafka topic &lt;em&gt;csas_enriched_pv is&lt;/em&gt; available, the fun part begins. This creates an Iceberg table with our “Pageviews per state per minute” scenario. If you are unfamiliar with configuring Iceberg in DeltaStream, this &lt;a href="https://deltastream.storylane.io/share/znxqkq1cg5t7" rel="noopener noreferrer"&gt;short interactive demo&lt;/a&gt; can walk you through it.&lt;/p&gt;

&lt;p&gt;CREATE TABLE pv_per_city_per_minute WITH(&lt;br&gt;
       ‘iceberg.rest.catalog.namespace.name’=’sgns’,&lt;br&gt;
       ‘iceberg.rest.catalog.table.name’=’pv_per_city_per_minute’&lt;br&gt;
)&lt;br&gt;
AS SELECT &lt;br&gt;
 user_city, &lt;br&gt;
 count(pageid) AS viewcount, &lt;br&gt;
 window_start,&lt;br&gt;
 window_end&lt;br&gt;
FROM TUMBLE(csas_enriched_pv, size 1 minutes)&lt;br&gt;
GROUP BY user_city, window_start, window_end;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="24" height="24"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
CREATE TABLE pv\_per\_city\_per\_minute WITH(
2. 
'iceberg.rest.catalog.namespace.name'='sgns',
3. 
'iceberg.rest.catalog.table.name'='pv\_per\_city\_per\_minute'
4. 
)
5. 
AS SELECT 
6. 
 user\_city, 
7. 
 count(pageid) AS viewcount, 
8. 
 window\_start,
9. 
 window\_end
10. 
FROM TUMBLE(csas\_enriched\_pv, size 1 minutes)
11. 
GROUP BY user\_city, window\_start, window\_end;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let’s break down what is happening here for those unfamiliar:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;CREATE TABLE pv_per_city_per_minute: Creates a new table named “pv_per_city_per_minute”&lt;/li&gt;
&lt;li&gt;WITH(…): Contains table properties or configurations. Further explanation is below.&lt;/li&gt;
&lt;li&gt;SELECT user_city, count(pageid) AS viewcount, window_start, window_end:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Selects the user’s city&lt;/li&gt;
&lt;li&gt;Counts the number of page IDs and names this count “viewcount”&lt;/li&gt;
&lt;li&gt;Includes the start and end times of each window interval&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;TUMBLE(csas_enriched_pv, size 1 minutes): Applies a tumbling window function to the “csas_enriched_pv” table with a window size of 1 minute. A tumbling window divides data into non-overlapping, fixed-size time intervals.&lt;/li&gt;
&lt;li&gt;GROUP BY user_city, window_start, window_end: Groups the results by state and time window, so the count is calculated separately for each state within each one-minute interval&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One possible initial confusion is where that ‘iceberg.rest.catalog.namespace.name’ value comes from. Iceberg supports an arbitrary number of namespaces to organize tables in a catalog. Our data store that maps to the Iceberg catalog is named &lt;em&gt;sgir&lt;/em&gt;; by right-clicking on it we get a dialog that includes &lt;em&gt;add,&lt;/em&gt; which prompts for a name. This becomes your new namespace; in our case, it is &lt;em&gt;sgns&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx4nracqg792tfqk2bckb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx4nracqg792tfqk2bckb.png" width="367" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To further explain the WITH parameters, the ‘iceberg.rest.catalog.table.name’ specifies the same value as the CREATE TABLE. It can be a different value to alias the table name you’ll be using in your queries to the table in Iceberg – for example, if you want to shorten the name or organize your query in a particular fashion. In our case, though, we’re keeping the values the same.&lt;br&gt;&lt;br&gt;
With that query running, let’s launch our second query to generate our table for “Pageviews per user per hour.” What we’re doing here is very similar, but we’ve changed our TUMBLE window to 1 hour and are using &lt;em&gt;userid&lt;/em&gt; instead of &lt;em&gt;user_city&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;CREATE TABLE pv_per_user_per_hour WITH(&lt;br&gt;
       ‘iceberg.rest.catalog.namespace.name’=’sgns’,&lt;br&gt;
       ‘iceberg.rest.catalog.table.name’=’pv_per_user_per_hour’&lt;br&gt;
)&lt;br&gt;
AS SELECT &lt;br&gt;
 userid, &lt;br&gt;
 count(pageid) AS viewcount, &lt;br&gt;
 window_start,&lt;br&gt;
 window_end&lt;br&gt;
FROM TUMBLE(csas_enriched_pv, size 1 hour)&lt;br&gt;
GROUP BY userid, window_start, window_end;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="24" height="24"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
CREATE TABLE pv\_per\_user\_per\_hour WITH(
2. 
'iceberg.rest.catalog.namespace.name'='sgns',
3. 
'iceberg.rest.catalog.table.name'='pv\_per\_user\_per\_hour'
4. 
)
5. 
AS SELECT 
6. 
 userid, 
7. 
 COUNT(pageid) AS viewcount, 
8. 
 window\_start,
9. 
 window\_end
10. 
FROM TUMBLE(csas\_enriched\_pv, SIZE 1 HOUR)
11. 
GROUP BY userid, window\_start, window\_end;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without leaving DeltaStream, we can query the Iceberg table for our “Pageviews per city per minute” scenario directly in the same workspace and get results without moving to another tool.&lt;/p&gt;

&lt;p&gt;SELECT user_city, hour(window_start) AS hour_value, SUM(viewcount) AS total&lt;br&gt;&lt;br&gt;
FROM pv_per_city_per_minute&lt;br&gt;&lt;br&gt;
GROUP BY user_city, hour(window_start)&lt;br&gt;&lt;br&gt;
ORDER BY total DESC&lt;br&gt;&lt;br&gt;
LIMIT 3;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="24" height="24"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
SELECT user\_city, HOUR(window\_start) AS hour\_value, SUM(viewcount) AS total 
2. 
FROM pv\_per\_city\_per\_minute 
3. 
GROUP BY user\_city, HOUR(window\_start)
4. 
ORDER BY total DESC
5. 
LIMIT 3;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftqbh4uch8zd60oryuhm7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftqbh4uch8zd60oryuhm7.png" width="736" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, we perform our second query to get the results from our Iceberg table for our top 5 users per hour.&lt;/p&gt;

&lt;p&gt;SELECT userid, window_start, SUM(viewcount) AS total&lt;br&gt;&lt;br&gt;
FROM pv_per_user_per_hour&lt;br&gt;&lt;br&gt;
GROUP BY userid, window_start&lt;br&gt;&lt;br&gt;
ORDER BY total DESC&lt;br&gt;&lt;br&gt;
LIMIT 5;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="24" height="24"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
SELECT userid, window\_start, SUM(viewcount) AS total 
2. 
FROM pv\_per\_user\_per\_hour 
3. 
GROUP BY userid, window\_start 
4. 
ORDER BY total DESC
5. 
LIMIT 5;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Like our first scenario, our second scenario, “Pageviews per user per hour, ” is all within DeltaStream. Since this data is now in Iceberg, you can also use any other compatible compute engine or BI tool without any lock-in.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdsxiw75nlutqi1qqa1yd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdsxiw75nlutqi1qqa1yd.png" width="705" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Shift-left and So Much More
&lt;/h2&gt;

&lt;p&gt;We’ve just walked through a classic “shift-left” scenario where we have moved enrichment and filtering to the streaming architecture and the popular Iceberg table format on AWS, making it available to query from any compatible compute engine. We’ve reduced latency by not waiting for a batch process to move the data through a medallion architecture, and we’ve reduced costs by eliminating that transformation compute cost and additional storage. We can even query those Iceberg tables from DeltaStream to do additional joins and enhancements and write them back out to Iceberg if we want. This is just the tip of the, um, Iceberg when it comes to what is possible with DeltaStream.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://www.deltastream.io/enable-shift-left-with-apache-kafka-and-iceberg/" rel="noopener noreferrer"&gt;Enable “Shift-Left” with Apache Kafka and Iceberg&lt;/a&gt; appeared first on &lt;a href="https://www.deltastream.io" rel="noopener noreferrer"&gt;DeltaStream&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>usecase</category>
    </item>
    <item>
      <title>A Guide to Stateless vs. Stateful Stream Processing</title>
      <dc:creator>kelsey-deltastream</dc:creator>
      <pubDate>Wed, 02 Apr 2025 17:30:30 +0000</pubDate>
      <link>https://dev.to/deltastream/a-guide-to-stateless-vs-stateful-stream-processing-fdl</link>
      <guid>https://dev.to/deltastream/a-guide-to-stateless-vs-stateful-stream-processing-fdl</guid>
      <description>&lt;p&gt;Stream processing has become a cornerstone of modern data architectures, enabling real-time analytics, event-driven applications, and continuous data pipelines. From tracking user activity on websites to monitoring IoT devices or processing financial transactions, stream processing systems allow organizations to handle data as it arrives. However, not all stream processing is created equal. Two fundamental paradigms—stateless and stateful stream processing—offer distinct approaches to managing data streams, each with unique strengths, trade-offs, and use cases. This blog’ll explore the technical differences, dive into their implementations, provide examples, and touch on when each approach is most applicable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Stream Processing?
&lt;/h2&gt;

&lt;p&gt;First, a little background. Stream processing differs from traditional batch processing by operating on continuous, unbounded flows of data—think logs, sensor readings, or social media updates arriving in real time. Frameworks like &lt;a href="https://kafka.apache.org/documentation/streams/" rel="noopener noreferrer"&gt;Apache Kafka Streams&lt;/a&gt;, &lt;a href="https://flink.apache.org/" rel="noopener noreferrer"&gt;Apache Flink&lt;/a&gt;, and &lt;a href="https://spark.apache.org/streaming/" rel="noopener noreferrer"&gt;Spark Streaming&lt;/a&gt; provide the infrastructure to efficiently ingest, transform, and analyze these streams. The key distinction between stateless and stateful processing lies in how these systems manage information across events.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stateless Stream Processing: Simplicity in Motion
&lt;/h2&gt;

&lt;p&gt;Stateless stream processing treats each event as an isolated entity, processing it without retaining memory of prior events. When an event arrives, the system applies predefined logic based solely on its content and then moves on.&lt;/p&gt;

&lt;h4&gt;
  
  
  How Stateless Works:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Input&lt;/strong&gt; A stream of events, e.g., &lt;code&gt;{user_id: 123, action: "click", timestamp: 2025-03-13T10:00:00}&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Processing&lt;/strong&gt; Apply a transformation or filter, such as “if action == ‘click’, increment a counter” or “convert timestamp to local time.”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output&lt;/strong&gt; Emit the result (e.g., a metric or enriched event) without referencing historical data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Technical Characteristics:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No State Storage&lt;/strong&gt; Stateless systems don’t maintain persistent storage or in-memory context, reducing resource overhead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt; Since events are independent, stateless processing scales horizontally easily. You can distribute the workload across nodes without synchronization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fault Tolerance&lt;/strong&gt; Recovery is straightforward—lost events can often be replayed without affecting correctness, assuming idempotency (i.e., processing the same event twice yields the same result).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Latency&lt;/strong&gt; Processing is typically low-latency due to minimal overhead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example Use Case&lt;/strong&gt; Consider a real-time clickstream filter that identifies and forwards “purchase” events from an e-commerce site. Each event is evaluated independently: if the action is “purchase,” it’s sent downstream; otherwise, it’s discarded. No historical context is needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementation Example (Kafka Streams):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;StreamsBuilder builder = new StreamsBuilder();&lt;br&gt;
KStream clicks = builder.stream(“clicks-topic”);&lt;br&gt;
clicks.filter((key, value) -&amp;gt; value.contains(“\”action\”:\”purchase\””))&lt;br&gt;
      .to(“purchases-topic”);&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="800" height="400"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
StreamsBuilder builder = new StreamsBuilder();
2. 
KStream&amp;lt;String, String&amp;gt; clicks = builder.stream("clicks-topic");
3. 
clicks.filter((key, value) -&amp;gt; value.contains("\"action\":\"purchase\""))
4. 
 .to("purchases-topic");

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Trade-Offs:&lt;/strong&gt; Stateless processing is lightweight and simple but limited. It can’t handle use cases requiring aggregation, pattern detection, or temporal relationships—like counting clicks per user over an hour—because it lacks memory of past events.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stateful Stream Processing: Memory and Context
&lt;/h2&gt;

&lt;p&gt;Stateful stream processing, in contrast, maintains state across events, enabling complex computations that depend on historical data. The system tracks information—like running totals, user sessions, or windowed aggregates—in memory or persistent storage.&lt;/p&gt;

&lt;h4&gt;
  
  
  How Stateful Works:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Input&lt;/strong&gt; The same stream, e.g., &lt;code&gt;{user_id: 123, action: "click", timestamp: 2025-03-13T10:00:00}.&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Processing&lt;/strong&gt; Update a state store, e.g., “increment user 123’s click count in a 1-hour window.”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output&lt;/strong&gt; Emit results based on the updated state, e.g., “user 123 has 5 clicks this hour.”&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Technical Characteristics:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;State Management&lt;/strong&gt; requires mechanisms to track state, such as key-value stores (e.g., RocksDB in Flink) or in-memory caches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt; More complex due to state partitioning and consistency requirements. Keys (e.g., user_id) are often used to shard state across nodes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fault Tolerance&lt;/strong&gt; State must be checkpointed or replicated to recover from failures, adding overhead but ensuring correctness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency&lt;/strong&gt; Higher than stateless due to state access and updates, though optimizations like caching mitigate this.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example Use Case:&lt;/strong&gt; A fraud detection system that flags users with more than 10 transactions in a 5-minute window. This requires tracking per-user transaction counts over time—a stateful operation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementation Example (Flink):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;DataStream stream = env.addSource(new TransactionSource());&lt;br&gt;
KeyedStream keyed = stream.keyBy(t -&amp;gt; t.userId);&lt;br&gt;
keyed.window(TumblingEventTimeWindows.of(Time.minutes(5)))&lt;br&gt;
     .aggregate(new CountAggregate())&lt;br&gt;
     .filter(count -&amp;gt; count &amp;gt;= 10)&lt;br&gt;
     .addSink(new AlertSink());&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="800" height="400"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
DataStream&amp;lt;Transaction&amp;gt; stream = env.addSource(new TransactionSource());
2. 
KeyedStream&amp;lt;Transaction, String&amp;gt; keyed = stream.keyBy(t -&amp;gt; t.userId);
3. 
keyed.window(TumblingEventTimeWindows.of(Time.minutes(5)))
4. 
 .aggregate(new CountAggregate())
5. 
 .filter(count -&amp;gt; count &amp;gt;= 10)
6. 
 .addSink(new AlertSink());

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Trade-Offs:&lt;/strong&gt; Stateful processing is powerful but resource-intensive. Managing state increases memory and storage demands, and fault tolerance requires sophisticated checkpointing or logging (e.g., Kafka’s changelog topics). It’s also prone to issues like state bloat (e.g., expiring old windows) if not properly managed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fppwjpjf32eq1xfxvv81x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fppwjpjf32eq1xfxvv81x.png" width="775" height="775"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Use Stateless vs. Stateful?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stateless:&lt;/strong&gt; Opt for stateless processing when your application involves simple transformations, filtering, or enrichment without historical context. It’s ideal for lightweight, high-throughput pipelines where speed and simplicity matter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stateful:&lt;/strong&gt; Choose stateful processing for analytics requiring memory—aggregations (e.g., running averages), sessionization, or pattern matching. It’s essential when the “why” behind an event depends on “what came before.”&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrap-up
&lt;/h2&gt;

&lt;p&gt;Stateless and stateful stream processing serve complementary roles in the streaming ecosystem. Stateless processing offers simplicity, scalability, and low latency for independent event handling, making it a go-to for straightforward transformations. In contrast, more complex and resource-heavy, stateful processing provides more advanced capabilities like time-based aggregations and contextual analysis, which are critical for real-time insights. Choosing between them depends on your use case: stateless for speed and simplicity, stateful for depth and memory. Modern frameworks often support both, allowing hybrid pipelines where stateless filters feed into stateful aggregators. Understanding their mechanics empowers you to design efficient, purpose-built streaming systems.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://www.deltastream.io/a-guide-to-stateless-vs-stateful-stream-processing/" rel="noopener noreferrer"&gt;A Guide to Stateless vs. Stateful Stream Processing&lt;/a&gt; appeared first on &lt;a href="https://www.deltastream.io" rel="noopener noreferrer"&gt;DeltaStream&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>streamprocessing</category>
      <category>apacheflink</category>
    </item>
    <item>
      <title>An Overview of Shift Left Architecture</title>
      <dc:creator>kelsey-deltastream</dc:creator>
      <pubDate>Wed, 26 Mar 2025 15:59:39 +0000</pubDate>
      <link>https://dev.to/deltastream/an-overview-of-shift-left-architecture-4mob</link>
      <guid>https://dev.to/deltastream/an-overview-of-shift-left-architecture-4mob</guid>
      <description>&lt;p&gt;Consumer expectations for speed of service has only increased since the dawn of the information age. The ability to process information quickly and cost-effectively is no longer a luxury, it’s a necessity. Businesses across industries are racing to extract value from their data in real-time, and a transformative approach known as “shift left” is gaining traction. With streaming technologies, organizations can move data processing earlier in the pipeline to slash storage and compute costs, cut latency, and simplify operations. Let’s dive into what shift left means, why it’s a game-changer, and how it can reshape your data strategy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Streaming Data: The Backbone of Modern Systems
&lt;/h2&gt;

&lt;p&gt;Streaming data is ubiquitous in today’s tech ecosystem. From mobile apps to IoT ecosystems, real-time processing powers everything from convenience to security. Consider the scale of this trend: Uber runs over 2,500 Apache Flink jobs to keep ride-sharing seamless; Netflix manages a staggering 16,000 Flink jobs internally; Epic Games tracks real-time gaming metrics; Samsung’s SmartThings platform analyzes device usage on the fly; and Palo Alto Networks leverages streaming for instant threat detection. These examples highlight a clear truth: &lt;a href="https://www.deltastream.io/batch-vs-stream-processing-how-to-choose/" rel="noopener noreferrer"&gt;batch processing alone can’t keep pace&lt;/a&gt; with the demands of modern applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Traditional ELT Approach: A Reliable but Rigid Standard
&lt;/h2&gt;

&lt;p&gt;Historically, organizations have leaned on &lt;a href="https://www.deltastream.io/what-is-streaming-etl-and-how-does-it-differ-from-batch-etl/" rel="noopener noreferrer"&gt;Extract, Load, Transform (ELT) pipelines&lt;/a&gt; to manage their data. In this model, raw data is ingested into &lt;a href="https://www.deltastream.io/data-warehouse-vs-data-lake-vs-data-lakehouse-whats-the-difference/" rel="noopener noreferrer"&gt;data warehouses or lakehouses&lt;/a&gt; and then transformed for downstream use. Many adopt the “medallion architecture” to structure this process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Bronze&lt;/strong&gt; Raw, unprocessed data lands here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silver&lt;/strong&gt; Data is cleansed, filtered, and standardized.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gold&lt;/strong&gt; Aggregations and business-ready datasets are produced.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This approach has been a staple thanks to the maturity of batch processing tools and its straightforward design. However, ELT’s limitations are glaring as data volumes grow and real-time needs intensify.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pain Points of ELT
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;High Latency&lt;/strong&gt; Batch jobs run on fixed hourly, daily, or worse schedules, leaving a gap between data generation and actionability. For time-sensitive use cases, this delay is a dealbreaker.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operational Complexity&lt;/strong&gt; When pipelines fail, partial executions can leave a mess. Restarting often requires manual cleanup, draining engineering resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Inefficiency&lt;/strong&gt; Batch processing recomputes entire datasets, even if only a fraction has changed. This overprovisioning unnecessarily inflates compute costs.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Shift Left: Processing Data in Flight
&lt;/h2&gt;

&lt;p&gt;Enter the shift left paradigm. Instead of deferring transformations to the warehouse, this approach uses streaming technologies—like Apache Flink—to process data as it flows through the pipeline. By shifting computation upstream, organizations can tackle data closer to its source, unlocking dramatic improvements.&lt;/p&gt;

&lt;h4&gt;
  
  
  Why Shift Left Wins
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Reduced Latency&lt;/strong&gt; Processing shrinks from hours or minutes to seconds—or even sub-seconds—making data available almost instantly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lower Costs&lt;/strong&gt; Incremental processing computes only what’s new, avoiding the waste of rehashing unchanged data. Reduced storage costs from data filtering before it lands and no redundant data copies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplified Operations&lt;/strong&gt; Continuous streams eliminate the need for intricate scheduling and orchestration, reducing operational overhead.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  A Real-World Win
&lt;/h4&gt;

&lt;p&gt;Consider a company running batch pipelines in a data warehouse, costing $11,000 monthly. After shifting left to streaming, their warehouse bill dropped to $2,500. Even factoring in streaming infrastructure costs, they halved their total spend—while slashing latency from 30 minutes to seconds. This isn’t an outlier; it’s a glimpse of shift left’s potential.&lt;/p&gt;

&lt;h4&gt;
  
  
  Bridging the Expertise Gap
&lt;/h4&gt;

&lt;p&gt;Streaming historically demanded deep expertise—think custom Flink jobs or Kafka integrations. That barrier is crumbling. Platforms like Delta Stream are democratizing stream processing with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Serverless Options&lt;/strong&gt; No need to manage clusters or nodes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated Operations&lt;/strong&gt; Fault tolerance and scaling are handled behind the scenes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQL-Friendly Interfaces&lt;/strong&gt; Define transformations with familiar syntax, not arcane code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reliability Guarantees&lt;/strong&gt; Exactly-once processing ensures data integrity without extra effort.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This shift makes streaming viable for teams without PhDs in distributed systems.&lt;/p&gt;

&lt;h4&gt;
  
  
  Transitioning Made Simple
&lt;/h4&gt;

&lt;p&gt;Adopting shift left doesn’t mean scrapping your existing work. If your batch pipelines use SQL, you’re in luck: those statements can often be repurposed for streaming with minor tweaks. This means you can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Preserve your business logic.&lt;/li&gt;
&lt;li&gt;Stick with SQL-based workflows your team already knows.&lt;/li&gt;
&lt;li&gt;See instant latency and cost benefits.&lt;/li&gt;
&lt;li&gt;Skip the headache of managing streaming infrastructure.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For example, a batch query aggregating hourly sales could pivot to a streaming windowed aggregation with near-identical syntax—same logic, faster results.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Future Is Streaming
&lt;/h2&gt;

&lt;p&gt;Shifting left isn’t just an optimization, it’s a strategic evolution. As data grows and real-time demands escalate, clinging to batch processing risks falling behind. Thanks to accessible tools and platforms, what was once the domain of tech giants like Netflix or Uber is now within reach for organizations of all sizes. The numbers speak for themselves: lower costs, sub-second insights, and leaner operations. For competitive businesses, shifting left may soon transition from a smart move to a survival imperative. Ready to rethink your pipelines? Take a look at our on-demand webinar for more, &lt;a href="https://www.deltastream.io/webinar/shift-left-lower-cost-reduce-latency-of-your-data-pipelines/" rel="noopener noreferrer"&gt;Shift Left: Lower Cost &amp;amp; Reduce Latency of your Data Pipelines&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://www.deltastream.io/shift-left-architecture-an-overview/" rel="noopener noreferrer"&gt;An Overview of Shift Left Architecture&lt;/a&gt; appeared first on &lt;a href="https://www.deltastream.io" rel="noopener noreferrer"&gt;DeltaStream&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>technology</category>
      <category>shiftleft</category>
    </item>
    <item>
      <title>The Flink 2.0 Official Release is Stream Processing All Grown Up</title>
      <dc:creator>kelsey-deltastream</dc:creator>
      <pubDate>Mon, 24 Mar 2025 16:20:05 +0000</pubDate>
      <link>https://dev.to/deltastream/the-flink-20-official-release-is-stream-processing-all-grown-up-3mi4</link>
      <guid>https://dev.to/deltastream/the-flink-20-official-release-is-stream-processing-all-grown-up-3mi4</guid>
      <description>&lt;p&gt;The Apache Flink crew dropped version 2.0.0 on March 24, 2025, and it’s the kind of update that makes you sit up and pay attention. I wrote about what was &lt;a href="https://www.deltastream.io/whats-coming-in-apache-flink-2-0/" rel="noopener noreferrer"&gt;likely coming to Flink 2.0&lt;/a&gt; back in November, and the announcement doesn’t disappoint. This isn’t some minor patch cobbled together over a weekend—165 people chipped in over two years, hammering out 25 Flink Improvement Proposals and squashing 369 bugs. It’s the first big leap since Flink 1.0 landed back in 2016, and as someone who’s been in the data weeds for more years than I care to remember, I’m here to tell you it’s a release that feels less like hype and more like a toolset finally catching up to reality. Let’s dig into the details.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Backdrop: Data’s Moving Fast, and We’re Still Playing Catch-Up
&lt;/h2&gt;

&lt;p&gt;Nine years ago, Flink 1.0 showed up when batch jobs were still the default, and streaming was the quirky sidekick. Fast forward to 2025, and the game’s flipped; real-time isn’t optional; it’s necessary. Whether it’s &lt;a href="https://www.deltastream.io/real-time-anomaly-detection-with-sensor-data/" rel="noopener noreferrer"&gt;tracking sensor pings&lt;/a&gt; from a factory floor or keeping an AI chatbot from spitting out stale answers, data’s got to move at the speed of now. The problem is that most streaming setups still feel like they’re held together with duct tape and optimism, costing a fortune and tripping over themselves when the load spikes. With Flink 2.0, this all becomes more manageable. &lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Cooking in Flink 2.0
&lt;/h2&gt;

&lt;p&gt;The official rundown’s got plenty of details, but I’m not here to parrot the press release. Here’s my take on what matters:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;State Goes Remote: Less Baggage, More Breathing Room&lt;/strong&gt;
Flink’s new trick of shoving state management off to remote storage is a quiet killer. No more tying compute and state together like they’re stuck in a toxic relationship; now they’re free to do their own thing. With some asynchronous magic and a nod to stuff like ForStDB, it’s built to scale without choking, especially if you’re running on Kubernetes or some other cloud playground. This feels like a lifeline for anyone who’s watched a pipeline buckle under big state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Materialized Tables: Less Babysitting, More Doing&lt;/strong&gt;
Ever tried explaining watermarks to a new hire without their eyes glazing over? Flink’s Materialized Tables promise to deal with the details. You toss in a query and a freshness rule, and it figures out the rest, the schema, refreshes, and all the grunt work. That means you can build a pipeline that works for batch and streaming relatively easily. Practical, not flashy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paimon Integration: Expanded Lakehouse Support&lt;/strong&gt;
The &lt;a href="https://paimon.apache.org/" rel="noopener noreferrer"&gt;Apache Paimon&lt;/a&gt; support was interesting to see. I’ve been curious about what might happen in that space for a while now. &lt;a href="https://hackernoon.com/what-the-heck-is-apache-paimon" rel="noopener noreferrer"&gt;I wrote about it&lt;/a&gt; in late 2023. The focus is on the concept of the Streaming Lakehouse. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Nod: Feeding the Future&lt;/strong&gt;
They hint at AI and large language models with a “strong foundation” line but don’t expect a manual yet. My guess is that Flink is betting on being the real-time engine for fraud alerts or LLM-driven apps that need fresh data to stay sharp, which just makes sense. Flink CDC 3.3 introduced support for OpenAI chat and embedding models, so keep an eye on those developments.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why I’m Excited for this Flink Release
&lt;/h2&gt;

&lt;p&gt;Flink 2.0 doesn’t feel like it’s chasing trends; it’s tackling the stuff that keeps engineers up at night. Compared to Kafka Streams, which is lean but light on heavy lifting, or Spark Streaming, which still leans on micro-batches like it’s 2015, Flink can handle the nitty-gritty of event-by-event processing. This release doubles down with better cloud smarts and focuses on keeping costs sane. It’s not about throwing more hardware at the problem; it’s about working more innovatively, and that’s a win for anyone who’s ever had to justify a budget.&lt;/p&gt;

&lt;p&gt;The usability updates really can’t be understated. Stream processing can be a beast to learn, but those Materialized Tables and cleaner abstractions mean you don’t need to be a guru to get started. It’s still Flink—powerful as ever—but it’s not gatekeeping anymore.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Rough Edges: Change Hurts
&lt;/h2&gt;

&lt;p&gt;Fair warning: This isn’t a plug-and-play upgrade if you’re cozy on Flink 1.x. Old APIs like DataSet are deprecated, and Scala’s legacy bits got the boot. Migration’s going to sting if your setup’s crusty. But honestly? That’s the price of progress. They’re trimming the fat to keep Flink lean and mean; dealing with the pain now will provide many years of stability.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottom Line: Flink 2.0 is Worth a Look
&lt;/h2&gt;

&lt;p&gt;Flink 2.0 isn’t here to reinvent the wheel but to make the wheel roll more smoothly. It’s a solid, no-nonsense upgrade that fits the chaos of 2025’s data demands: fast, scalable, and less of a pain to run. The community’s poured real effort into this, and it shows. Get all the details from the Flink team in their &lt;a href="https://flink.apache.org/2025/03/24/apache-flink-2.0.0-a-new-era-of-real-time-data-processing/" rel="noopener noreferrer"&gt;announcement&lt;/a&gt; and then start planning for your updates. Or take a look at &lt;a href="https://console.deltastream.io/?" rel="noopener noreferrer"&gt;DeltaStream&lt;/a&gt; if you’re interested in all the functionality of Flink, but without the required knowledge and infrastructure.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://www.deltastream.io/the-flink-2-0-official-release-is-stream-processing-all-grown-up/" rel="noopener noreferrer"&gt;The Flink 2.0 Official Release is Stream Processing All Grown Up&lt;/a&gt; appeared first on &lt;a href="https://www.deltastream.io" rel="noopener noreferrer"&gt;DeltaStream&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>technology</category>
      <category>apacheflink</category>
    </item>
    <item>
      <title>The Top Four Trends Driving Organizations from Batch to Streaming Analytics</title>
      <dc:creator>kelsey-deltastream</dc:creator>
      <pubDate>Thu, 20 Mar 2025 15:43:49 +0000</pubDate>
      <link>https://dev.to/deltastream/the-top-four-trends-driving-organizations-from-batch-to-streaming-analytics-3p72</link>
      <guid>https://dev.to/deltastream/the-top-four-trends-driving-organizations-from-batch-to-streaming-analytics-3p72</guid>
      <description>&lt;p&gt;Over the past decade, the way businesses handle data has fundamentally changed. Organizations that once relied on batch processing to analyze data at scheduled intervals are now moving toward &lt;strong&gt;streaming analytics&lt;/strong&gt; —where data is processed in real-time. While early adopters of streaming technologies were primarily large tech companies like Netflix, Apple, and DoorDash, today, businesses of all sizes are embracing streaming analytics to make faster, more informed decisions.&lt;/p&gt;

&lt;p&gt;But what’s driving this shift? Below, we explore the key trends pushing organizations toward streaming analytics and highlight the most common use cases where it’s making a significant impact.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Rising Customer Expectations for Real-Time Insights
&lt;/h2&gt;

&lt;p&gt;“ 74% of IT leaders report that streaming data enhances customer experiences, and 73% say it enables faster decision-making.” Source: &lt;a href="https://venturebeat.com/data-infrastructure/early-adopters-of-data-streaming-see-up-to-10x-returns-survey-finds/#:~:text=Notably%2C%20a%20large%20number%20of,improving%20customer%20experience%2C%20automating%20internal" rel="noopener noreferrer"&gt;VentureBeat&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Modern consumers expect instant interactions. Businesses that rely on batch-processed analytics struggle to keep up with customer demands for instant responses. Streaming analytics allows companies to react in real-time, improving customer satisfaction and competitive advantage. &lt;/p&gt;

&lt;h4&gt;
  
  
  Example Use Cases:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;E-commerce:&lt;/strong&gt; Dynamic pricing and personalized recommendations based on real-time browsing behavior.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AdTech:&lt;/strong&gt; Update ad bids dynamically based on audience engagement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gaming:&lt;/strong&gt; Tailors in-game rewards based on real-time player activity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Enterprise-Ready Solutions Make Streaming More Accessible
&lt;/h2&gt;

&lt;p&gt;“ The streaming analytics market is projected to grow at a CAGR of 26% from 2024 to 2032, reaching $176.29B.” Source: &lt;a href="https://www.gminsights.com/industry-analysis/streaming-analytics-market" rel="noopener noreferrer"&gt;GMInsights&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Previously, streaming analytics required specialized expertise and was considered too complex and costly for most organizations. Today, the rise of streaming ETL and continuous data integration–combined with cloud-native solutions such as Google Dataflow, RedPanda, Confluent, and DeltaStream–is lowering the barrier to adoption. These platforms provide enterprise-friendly managed solutions that eliminate operational overhead, allowing businesses to implement streaming analytics without needing large in-house engineering teams. &lt;/p&gt;

&lt;h4&gt;
  
  
  Example Use Cases:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data Warehousing:&lt;/strong&gt; Ingests and updates analytics data in real time, ensuring dashboards reflect the latest insights.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IoT Platforms:&lt;/strong&gt; Aggregates and processes sensor data instantly for real-time monitoring and automation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Financial Services:&lt;/strong&gt; Streams transactions into risk analytics models to detect fraud as it happens.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. The Rise of LLMs and the Need for Fresh, Real-Time Data
&lt;/h2&gt;

&lt;p&gt;“ AI and ML adoption are driving &lt;strong&gt;a 40% increase in real-time data workloads.&lt;/strong&gt; ” Source: &lt;a href="https://www.infoq.com/" rel="noopener noreferrer"&gt;InfoQ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The rapid adoption of LLMs has shifted the focus from model capabilities to data freshness and uniqueness. Foundational models are becoming increasingly commoditized, and organizations can no longer rely on model performance alone for differentiation. Instead, real-time access to fresh, proprietary data determines accuracy, relevance, and competitive advantage.&lt;/p&gt;

&lt;p&gt;The recent partnership between Confluent and Databricks highlights this growing demand for real-time data in AI workloads. Yet, stream processing remains a critical gap—organizations need ways to transform, enrich, and prepare real-time data before feeding it into RAG pipelines and other AI-driven applications to ensure accuracy and relevance.&lt;/p&gt;

&lt;h4&gt;
  
  
  Example Use Cases:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real-Time Feature Engineering:&lt;/strong&gt; Continuously transforms raw data streams into structured features for AI models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;News &amp;amp; Financial Analytics:&lt;/strong&gt; Filters, enriches, and feeds LLMs with the latest market trends and breaking news.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conversational AI &amp;amp; Chatbots:&lt;/strong&gt; Incorporates real-time business data, technical support, and events to improve AI-driven interactions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Regulations are Driving Real-Time Monitoring Needs
&lt;/h2&gt;

&lt;p&gt;“ On November 12, 2024, the UK’s Financial Conduct Authority (FCA) fined Metro Bank £16.7 million for failing real-time monitoring of 60 million transactions worth £51 billion, a direct violation of their Anti-Money Laundering (AML) regulations.” Source &lt;a href="https://www.fca.org.uk/news/press-releases/fca-fines-metro-bank-16m-financial-crime-failings" rel="noopener noreferrer"&gt;FCA&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Industries with strict compliance requirements are now mandated to monitor and report data events in real-time. Whether it’s fraud detection in banking, patient data security in healthcare, or GDPR compliance in data privacy, organizations must implement streaming analytics to meet these regulatory requirements. Real-time monitoring ensures businesses can detect anomalies instantly and prevent costly compliance violations.&lt;/p&gt;

&lt;h4&gt;
  
  
  Example Use Cases:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Banking:&lt;/strong&gt; Anti-money laundering (AML) compliance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telecom:&lt;/strong&gt; Real-time call monitoring for regulatory audits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Government:&lt;/strong&gt; Cybersecurity and national security threat detection.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion: Streaming Analytics is No Longer Optional
&lt;/h2&gt;

&lt;p&gt;What was once a niche technology for highly technical organizations is now a necessity for businesses across industries. The push toward &lt;strong&gt;real-time analytics&lt;/strong&gt; is being fueled by customer expectations, technological advancements, AI adoption, regulatory requirements, and competitive pressures.&lt;/p&gt;

&lt;p&gt;Whether businesses are looking to prevent fraud, optimize supply chains, or personalize customer experiences, the ability to analyze data in motion is now a crucial part of modern data strategies.&lt;/p&gt;

&lt;p&gt;For organizations still relying on batch processing, it is time to evaluate how streaming analytics can transform their data-driven decision-making. The future is real-time—how will you be ready?&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://www.deltastream.io/the-top-four-trends-driving-organizations-from-batch-to-streaming-analytics/" rel="noopener noreferrer"&gt;The Top Four Trends Driving Organizations from Batch to Streaming Analytics&lt;/a&gt; appeared first on &lt;a href="https://www.deltastream.io" rel="noopener noreferrer"&gt;DeltaStream&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>technology</category>
      <category>batchdata</category>
      <category>streamingdata</category>
      <category>realtimedata</category>
    </item>
    <item>
      <title>A Guide to the Top Stream Processing Frameworks</title>
      <dc:creator>kelsey-deltastream</dc:creator>
      <pubDate>Mon, 27 Jan 2025 21:34:33 +0000</pubDate>
      <link>https://dev.to/deltastream/a-guide-to-the-top-stream-processing-frameworks-3pg6</link>
      <guid>https://dev.to/deltastream/a-guide-to-the-top-stream-processing-frameworks-3pg6</guid>
      <description>&lt;p&gt;Every second, billions of data points pulse through the digital arteries of modern business. A credit card swipe, a sensor reading from a wind farm, or stock trades on Wall Street  – each signal holds potential value, but only if you can catch it at the right moment. Stream processing frameworks enable organizations to process and analyze massive streams of data with low latency. This blog explores some of the most popular stream processing frameworks available today, highlighting their features, advantages, and use cases. These frameworks form the backbone of many real-time applications, enabling businesses to derive meaningful insights from ever-flowing torrents of data&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Stream Processing?
&lt;/h2&gt;

&lt;p&gt;Stream processing refers to the practice of processing data incrementally as it is generated rather than waiting for the entire dataset to be collected. This allows systems to respond to events or changes in real-time, making it invaluable for time-sensitive applications.&lt;br&gt;&lt;br&gt;
For example:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Fraud detection in banking&lt;/strong&gt; : &lt;a href="https://www.deltastream.io/enhancing-fraud-detection-with-puppygraph-and-deltastream/" rel="noopener noreferrer"&gt;Transactions can be analyzed in real-time&lt;/a&gt; for suspicious activity.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;E-commerce recommendations&lt;/strong&gt; : Streaming data from user interactions can be used to offer instant product recommendations.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;IoT monitoring&lt;/strong&gt; : &lt;a href="https://www.deltastream.io/stream-processing-for-iot-data/" rel="noopener noreferrer"&gt;Data from IoT devices can be processed continuously&lt;/a&gt; for system updates or alerts.&lt;br&gt;&lt;br&gt;
Stream processing frameworks enable developers to build, deploy, and scale real-time applications. Let’s examine some of the most popular ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Kafka Streams
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Overview:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kafka.apache.org/documentation/streams/" rel="noopener noreferrer"&gt;Apache Kafka Streams&lt;/a&gt;, an extension of &lt;a href="https://kafka.apache.org/" rel="noopener noreferrer"&gt;Apache Kafka&lt;/a&gt;, is a lightweight library for building applications and microservices. It provides a robust API for processing data streams directly from Kafka topics and writing the results back to other Kafka topics or external systems. The API only supports JVM languages, including Java and Scala.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is fully integrated with Apache Kafka, making it a seamless choice for Kafka users.&lt;/li&gt;
&lt;li&gt;Provides stateful processing with the ability to maintain in-memory state stores.&lt;/li&gt;
&lt;li&gt;Scalable and fault-tolerant architecture.&lt;/li&gt;
&lt;li&gt;Built-in support for windowing operations and event-time processing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time event monitoring and processing.&lt;/li&gt;
&lt;li&gt;Building distributed stream processing applications.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Log aggregation and analytics.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kafka Streams is ideal for developers already using Kafka for message brokering, as it eliminates the need for additional stream processing infrastructure.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Apache Flink
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Overview:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.deltastream.io/why-apache-flink-is-the-industry-gold-standard/" rel="noopener noreferrer"&gt;Apache Flink is a highly versatile and scalable stream processing framework&lt;/a&gt; that excels at handling unbounded data streams. It offers powerful features for stateful processing, event-time semantics, and exactly-once guarantees.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Support for both batch and stream processing in a unified architecture.&lt;/li&gt;
&lt;li&gt;Event-time processing: Handles out-of-order events using watermarks.&lt;/li&gt;
&lt;li&gt;High fault tolerance with distributed state management.&lt;/li&gt;
&lt;li&gt;Integration with popular tools such as Apache Kafka, Apache Cassandra, and HDFS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complex event processing in IoT applications.&lt;/li&gt;
&lt;li&gt;Fraud detection and risk assessment in finance.&lt;/li&gt;
&lt;li&gt;Real-time analytics for social media platforms.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Apache Flink is particularly suited for applications requiring low-latency processing, high throughput, and robust state management.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache Spark Streaming
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Overview:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://spark.apache.org/streaming/" rel="noopener noreferrer"&gt;Apache Spark Streaming&lt;/a&gt; extends Apache Spark’s batch processing capabilities to real-time data streams. Its micro-batch architecture processes streaming data in small, fixed intervals, making it easy to build real-time applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Micro-batch processing: Processes streams in discrete intervals for near-real-time results.&lt;/li&gt;
&lt;li&gt;High integration with the larger Spark ecosystem, including MLlib, GraphX, and Spark SQL.&lt;/li&gt;
&lt;li&gt;Scalable and fault-tolerant architecture.&lt;/li&gt;
&lt;li&gt;Compatible with popular data sources like Kafka, HDFS, and Amazon S3.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Live dashboards and analytics.&lt;/li&gt;
&lt;li&gt;Real-time sentiment analysis for social media.&lt;/li&gt;
&lt;li&gt;Log processing and monitoring for large-scale systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While its micro-batch approach results in slightly higher latency compared to true stream processing frameworks like Flink, Spark Streaming is still a popular choice due to its ease of use and integration with the Spark ecosystem.&lt;/p&gt;

&lt;p&gt;Apache Storm&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overview:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://storm.apache.org/" rel="noopener noreferrer"&gt;Apache Storm&lt;/a&gt; is one of the pioneers in the field of distributed stream processing. Known for its simplicity and low latency, Storm is a reliable choice for real-time processing of high-velocity data streams.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tuple-based processing: Processes data streams as tuples in real time.&lt;/li&gt;
&lt;li&gt;High fault tolerance with automatic recovery of failed components.&lt;/li&gt;
&lt;li&gt;Horizontal scalability and support for a wide range of programming languages.&lt;/li&gt;
&lt;li&gt;Simple architecture with “spouts” (data sources) and “bolts” (data processors).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time event processing for online gaming.&lt;/li&gt;
&lt;li&gt;Fraud detection in financial transactions.&lt;/li&gt;
&lt;li&gt;Processing sensor data in IoT systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Although Apache Storm has been largely overtaken by newer frameworks like Flink and Kafka Streams, it remains an option for applications where low latency and simplicity are key priorities. It is being actively maintained and updated, with version 2.7.1 released in November 2024.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google Dataflow
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Overview:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://cloud.google.com/products/dataflow" rel="noopener noreferrer"&gt;Google Dataflow&lt;/a&gt; is a fully managed, cloud-based stream processing service. It is built on the Apache Beam model, which provides a unified API for batch and stream processing and enables portability across different execution engines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unified programming model for batch and stream processing.&lt;/li&gt;
&lt;li&gt;Integration with Google Cloud services like BigQuery, Pub/Sub, and Cloud Storage.&lt;/li&gt;
&lt;li&gt;Automatic scaling and resource management.&lt;/li&gt;
&lt;li&gt;Support for windowing and event-time processing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time analytics pipelines in cloud-native applications.&lt;/li&gt;
&lt;li&gt;Data enrichment and transformation for machine learning workflows.&lt;/li&gt;
&lt;li&gt;Monitoring and alerting systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Google Dataflow is best for businesses already operating in the Google Cloud ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon Kinesis
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Overview:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://aws.amazon.com/kinesis/" rel="noopener noreferrer"&gt;Amazon Kinesis&lt;/a&gt; is a cloud-native stream processing platform provided by AWS. It simplifies streaming data ingestion, processing, and analysis in real-time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fully managed service with automatic scaling.&lt;/li&gt;
&lt;li&gt;Supports custom application development using the Kinesis Data Streams API.&lt;/li&gt;
&lt;li&gt;Integration with AWS services such as Lambda, S3, and Redshift.&lt;/li&gt;
&lt;li&gt;Built-in analytics capabilities with Kinesis Data Analytics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time clickstream analysis for e-commerce platforms.&lt;/li&gt;
&lt;li&gt;IoT telemetry data processing.&lt;/li&gt;
&lt;li&gt;Monitoring application logs and metrics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Amazon Kinesis can be the most sensible option for a company already using AWS services, as it offers a quick way to start. &lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing the Right Stream Processing Framework
&lt;/h2&gt;

&lt;p&gt;The choice of a stream processing framework depends on your specific requirements, such as latency tolerance, scalability needs, ease of integration, and existing technology stack. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you’re heavily invested in Kafka, Kafka Streams is a likely fit.&lt;/li&gt;
&lt;li&gt;Apache Flink is an excellent choice for low-latency, high-throughput applications and works with a wide array of data repository types.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  - Organizations with expertise in the cloud can benefit from managed services like Google Dataflow or Amazon Kinesis.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Stream processing frameworks are essential for extracting real-time insights from dynamic data streams. The frameworks mentioned above – Apache Kafka Streams, Flink, Spark Streaming, Storm, Google Dataflow, and Amazon Kinesis, each have unique strengths and ideal use cases. By selecting the right tool for your needs, you can unlock the full potential of real-time data processing, powering next-generation applications and services.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://www.deltastream.io/a-guide-to-the-top-stream-processing-frameworks/" rel="noopener noreferrer"&gt;A Guide to the Top Stream Processing Frameworks&lt;/a&gt; appeared first on &lt;a href="https://www.deltastream.io" rel="noopener noreferrer"&gt;DeltaStream&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>technology</category>
      <category>streamprocessing</category>
      <category>dataengineering</category>
    </item>
    <item>
      <title>Enhancing Fraud Detection with PuppyGraph and DeltaStream</title>
      <dc:creator>kelsey-deltastream</dc:creator>
      <pubDate>Tue, 17 Dec 2024 16:39:21 +0000</pubDate>
      <link>https://dev.to/deltastream/enhancing-fraud-detection-with-puppygraph-and-deltastream-27po</link>
      <guid>https://dev.to/deltastream/enhancing-fraud-detection-with-puppygraph-and-deltastream-27po</guid>
      <description>&lt;h1&gt;Enhancing Fraud Detection with PuppyGraph and DeltaStream&lt;/h1&gt;

&lt;p&gt;The banking and finance industry has been one of the biggest beneficiaries of digital advancements. Many technological innovations find practical applications in finance, providing convenience and efficiency that can set institutions apart in a competitive market. However, this ease and accessibility have also led to increased fraud, particularly in credit card transactions, which remain a growing concern for consumers and financial institutions.&lt;/p&gt;

&lt;p&gt;Traditional fraud detection systems rely on rule-based methods that struggle in real-time scenarios. These outdated approaches are often reactive, identifying fraud only after it occurs. Without real-time capabilities or advanced reasoning, they fail to match fraudsters’ rapidly evolving tactics. A more proactive and sophisticated solution is essential to combat this threat effectively.&lt;/p&gt;

&lt;p&gt;This is where graph analytics and real-time stream processing come into play. Combining &lt;a href="http://puppygraph.com" rel="noopener noreferrer"&gt;PuppyGraph&lt;/a&gt;, the first and only graph query engine, with &lt;a href="https://www.deltastream.io/" rel="noopener noreferrer"&gt;DeltaStream&lt;/a&gt;, a stream processing engine powered by Apache Flink, enables institutions to improve fraud detection accuracy and efficiency, including real-time capabilities. In this blog post, we’ll explore the challenges of modern fraud detection and the advantages of using graph analytics and real-time processing. We will also provide a step-by-step guide to building a fraud detection system with PuppyGraph and DeltaStream. &lt;/p&gt;

&lt;p&gt;Let’s start by examining the challenges of modern fraud detection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Fraud Detection Challenges
&lt;/h2&gt;

&lt;p&gt;Credit card fraud has always been a game of cat and mouse. Even before the rise of digital processing and online transactions, fraudsters found ways to exploit vulnerabilities. With the widespread adoption of technology, fraud has only intensified, creating a constantly evolving fraud landscape that is increasingly difficult to navigate. Key challenges in modern fraud detection include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Volume: Daily credit card transactions are too vast to review and identify suspicious activity manually. Automation is critical to sorting through all that data and identifying anomalies.&lt;/li&gt;
&lt;li&gt;Complexities: Fraudulent activity often involves complex patterns and relationships that traditional rule-based systems can’t detect. For example, fraudsters may use stolen credit card information to make a series of small transactions before a large one or use multiple cards in different locations in a short period.&lt;/li&gt;
&lt;li&gt;Real-time: The sooner fraud is detected, the less financial loss there will be. Real-time analysis is crucial in detecting and preventing transactions as they happen, especially when fraud can be committed at scale in seconds.&lt;/li&gt;
&lt;li&gt;Agility: Fraudsters will adapt to new security measures. Fraud detection systems must be agile, even learning as they go, to keep up with the evolving threats and tactics.&lt;/li&gt;
&lt;li&gt;False positives: While catching fraudulent transactions is essential, it’s equally important to avoid flagging legitimate transactions as fraud. False positives can frustrate customers, especially when a card is automatically locked out due to legitimate purchases. As a consequence, they can adversely affect revenue.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To tackle these challenges, businesses require a solution that processes large volumes of data in real-time, identifies complex patterns, and evolves with new fraud tactics. Graph analytics and real-time stream processing are essential components of such a system. By mapping and analyzing transaction networks, businesses can more effectively detect anomalies in customer behavior and identify potentially fraudulent transactions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Leveraging Graph Analytics for Fraud Detection
&lt;/h2&gt;

&lt;p&gt;Traditional fraud detection methods analyze individual transactions in isolation. This can miss connections and patterns that emerge when we examine the bigger picture. Graph analytics allows us to visualize and analyze transactions as a network of connected things.&lt;/p&gt;

&lt;p&gt;Think of it like a social network. Each customer, credit card, merchant, and device becomes a node in the graph, and each transaction connects those nodes. We can find hidden patterns and anomalies that indicate fraud by looking at the relationships between nodes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvh49a5jr9ae8c5zccbn6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvh49a5jr9ae8c5zccbn6.png" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure: an example schema for fraud detection use case&lt;/p&gt;

&lt;p&gt;Here’s how graph analytics can be applied to fraud detection:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Finding suspicious connections: Graph algorithms can discover unusual patterns of connections between entities. For example, if the same person uses multiple credit cards in different locations in a short period or a single card is used to buy from a group of merchants known for fraud, those connections will appear in the graph and be flagged as suspicious.&lt;/li&gt;
&lt;li&gt;Uncovering fraud rings: Fraudsters often work within the same circles, using multiple identities and accounts to carry out scams. Graph analytics can find those complex networks of people and their connections, helping to identify and potentially break up entire fraud rings.&lt;/li&gt;
&lt;li&gt;Surfacing identity theft: When a stolen credit card is used, the spending patterns will generally be quite different from the cardholder’s normal behavior. By looking at the historical and current transactions within a graph, you can see sudden changes in spending habits, locations, and types of purchases that may indicate identity theft.&lt;/li&gt;
&lt;li&gt;Predicting future fraud: Graph analytics can predict future fraud by looking at historical data and the patterns that precede a fraudulent transaction. By predicting fraud before it happens, businesses can take action to prevent it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course, all of these benefits are extremely helpful. However, the biggest hurdle to realizing them is the complexity of implementing a graph database. Let’s look at some of those challenges and how PuppyGraph can help users avoid them entirely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges of Implementing and Running Graph Databases
&lt;/h2&gt;

&lt;p&gt;As shown, graph databases can be an excellent tool for fraud detection. So why aren’t they used more frequently? This usually boils down to implementing and managing them, which can be complex for those unfamiliar with the technology. The hurdles that come with implementing a graph database can far outweigh the benefits for some businesses, even stopping them from adopting this technology altogether. Here are some of the issues generally faced by companies implementing graph databases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cost: Traditional relational databases have been the norm for decades, and many organizations have invested heavily in their infrastructure. Switching to a graph database or even running a proof of concept requires a significant upfront investment in new software, hardware, and training. &lt;/li&gt;
&lt;li&gt;Implementing ETL: Extracting, transforming, and loading (ETL) data into a graph database can be tricky and time-consuming. Data needs to be restructured to fit into a graph model, which requires knowledge of the underlying data to be moved over and how to represent these entities and relationships within a graph model. This requires specific skills and adds to the implementation time and cost, meaning the benefits may be delayed.&lt;/li&gt;
&lt;li&gt;Bridging the skills gap: Graph databases require a different data modeling and querying approach from traditional databases. In addition to the previous point regarding ETL, finding people with the skills to manage, maintain, and query the data within a graph database can also be challenging. Without these skills, graph technology adoption is mostly dead in the water.&lt;/li&gt;
&lt;li&gt;Integration challenges: Integrating a graph database with existing systems and applications is complex. This usually involves taking the output from graph queries and mapping them into downstream systems, which requires careful planning and execution. Getting data to flow smoothly and be compatible with different systems is significant.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These challenges highlight the need for solutions that make graph database adoption and management more accessible. A graph query engine like PuppyGraph addresses these issues by enabling teams to integrate their data and query it as a graph in minutes without the complexity of ETL processes or the need to set up a traditional graph database. Let’s look at how PuppyGraph helps teams become graph-enabled without ETL or the need for a graph database.&lt;/p&gt;

&lt;h2&gt;
  
  
  How PuppyGraph Solves Graph Database Challenges
&lt;/h2&gt;

&lt;p&gt;PuppyGraph is built to tackle the challenges that often hinder graph database adoption. By rethinking graph analytics, PuppyGraph removes many entry barriers, opening up graph capabilities to more teams than otherwise possible. Here’s how PuppyGraph addresses many of the hurdles mentioned above:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zero-ETL: One of PuppyGraph’s most significant advantages is connecting directly to your existing data warehouses and data lakes—no more complex and time-consuming ETL. There is no need to restructure data or create separate graph databases. Simply connect the graph query engine directly to your SQL data store and start querying your data as a graph in minutes.&lt;/li&gt;
&lt;li&gt;Cost: PuppyGraph reduces the expenses of graph analytics by using your existing data infrastructure. There is no need to invest in new database infrastructure or software and no ongoing maintenance costs of traditional graph databases. Eliminating the ETL process significantly reduces the engineering effort required to build and maintain fragile data pipelines, saving time and resources.&lt;/li&gt;
&lt;li&gt;Reduced learning curve: Traditional graph databases often require users to master complex graph query languages for every operation, including basic data manipulation. PuppyGraph simplifies this by functioning as a graph query engine that operates alongside your existing SQL query engine using the same data. You can continue using familiar SQL tools for data preparation, aggregation, and management. When more complex queries suited to graph analytics arise, PuppyGraph handles them seamlessly. This approach saves time and allows teams to reserve graph query languages specifically for graph traversal tasks, reducing the learning curve and broadening access to graph analytics.&lt;/li&gt;
&lt;li&gt;Multi-query language support: Engineers can continue to use their existing SQL skills and platform, allowing them to leverage graph querying when needed. The platform offers many ways to build graph queries, including Gremlin and Cypher support, so your existing team can quickly adopt and use graph technology.&lt;/li&gt;
&lt;li&gt;Effortless scaling: PuppyGraph’s architecture separates compute and storage so it can easily handle petabytes of data. By leveraging their underlying SQL storage, teams can effortlessly scale their compute as required. You can focus on extracting value from your data without scaling headaches.&lt;/li&gt;
&lt;li&gt;Fast deployment: With PuppyGraph, you can deploy and start querying your data as a graph in 10 minutes. There are no long setup processes or complex configurations. Fast deployment means you can start seeing the benefits of graph analytics and speed up your fraud detection.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short, PuppyGraph removes the traditional barriers to graph adoption so more institutions can use graph analytics for fraud detection use cases. By simplifying, reducing costs, and empowering existing teams with effortless graph adoption, PuppyGraph makes graph technology accessible for all teams and organizations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-Time Fraud Prevention with DeltaStream
&lt;/h2&gt;

&lt;p&gt;Speed is key in the fight against fraud, and responsiveness is crucial to preventing or minimizing the impact of an attack. Systems and processes that act on events with minimal latency can mean the difference between successful and unsuccessful cyber attacks. DeltaStream empowers businesses to analyze and respond to suspicious transactions in real-time, minimizing losses and preventing further damage.&lt;/p&gt;

&lt;p&gt;Why Real-Time Matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Immediate Response: Rapid incident response means security and data teams can detect, isolate, and trigger mitigation protocols, minimizing their vulnerability window faster than ever. With real-time data and sub-second latency, the Mean Time to Detect (MTTD) and Mean Time to Respond (MTTR) can be significantly reduced.&lt;/li&gt;
&lt;li&gt;Proactive Prevention: Data and security teams can identify behavior patterns as they emerge and implement mitigation tactics. Real-time allows for continuous monitoring of system health and security with predictive models. &lt;/li&gt;
&lt;li&gt;Improved Accuracy: Real-time data provides a more accurate view of customer behavior for precise detection. Threats are more complex than ever and often involve multi-stage attack patterns; streaming data aids in identifying these complex and ever-evolving threat tactics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DeltaStream’s Key Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Speed: Increase the speed of your data processing and your team’s ability to create data applications. Reduce latency and cost by shifting your data transformations out of your warehouse and into DeltaStream. Data teams can also quickly write queries in SQL to create analytics pipelines with no other complex languages to learn.&lt;/li&gt;
&lt;li&gt;Team Focus: Eliminate maintenance tasks with our continually optimizing Flink operator. Your team isn’t focused on infrastructure, meaning they can focus on building and strengthening pipelines.&lt;/li&gt;
&lt;li&gt;Unified View: An organization’s data rarely comes from just one source. Process streaming data from multiple sources in real-time to get a complete picture of activities. This means transaction data, user behavior, and other relevant signals can be analyzed together as they occur.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By combining PuppyGraph’s graph analytics with DeltaStream’s real-time processing, businesses can create a dynamic fraud detection system that stays ahead of evolving threats.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step-by-Step tutorial: DeltaStream and PuppyGraph
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fabjouil6c9a1xgp9az9r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fabjouil6c9a1xgp9az9r.png" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this tutorial, we go through the high-level steps of integrating DeltaStream and PuppyGraph. &lt;/p&gt;

&lt;p&gt;The detailed steps are available at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/puppygraph/puppygraph-getting-started/blob/main/integration-demos/deltastream-demo/delta_stream_databricks.md" rel="noopener noreferrer"&gt;Integrating DeltaStream with Databricks and Querying Data Using PuppyGraph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/puppygraph/puppygraph-getting-started/blob/main/integration-demos/deltastream-demo/delta_stream_snowflake.md" rel="noopener noreferrer"&gt;Integrating DeltaStream with Snowflake and Querying Data Using PuppyGraph&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Starting a Kafka Cluster
&lt;/h3&gt;

&lt;p&gt;We start a Kafka Server as the data input. (Later in the tutorial, we’ll send financial data through Kafka.)&lt;/p&gt;

&lt;p&gt;We create topics for financial data like this:&lt;/p&gt;

&lt;p&gt;bin/kafka-topics.sh –create –topic kafka-Account –bootstrap-server localhost:9092 –partitions 1 –replication-factor 1&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="800" height="400"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
bin/kafka-topics.sh --create --topic kafka-Account --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Setting up DeltaStream
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Connecting to Kafka
&lt;/h4&gt;

&lt;p&gt;Log in to the Deltastream console. Then, navigate to &lt;strong&gt;Resources&lt;/strong&gt; and add a Kafka Store – for example, kafka_demo – with the Kafka Cluster parameters we created in the previous step.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fldio5jrkh9qpfebebv5b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fldio5jrkh9qpfebebv5b.png" width="800" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, in the &lt;strong&gt;Workspace&lt;/strong&gt; , create a deltastream database – for example: kafka_db&lt;br&gt;&lt;br&gt;
After that, we use DeltaStream SQL to create &lt;em&gt;streams&lt;/em&gt; for the Kafka &lt;em&gt;topics&lt;/em&gt; we created in the previous step. The &lt;em&gt;stream&lt;/em&gt; describes the topic’s physical layout so it can be easily referenced with SQL. Here is an example of one of the streams we create in DeltaStream for a Kafka topic. Once we declare the streams, we can build streaming data pipelines to transform, enrich, aggregate, and prepare streaming data for analysis in PuppyGraph. First, we’ll define the &lt;em&gt;account_stream&lt;/em&gt; from the &lt;em&gt;kafka-Account&lt;/em&gt; topic.&lt;/p&gt;

&lt;p&gt;CREATE STREAM account_stream (&lt;br&gt;
  “label” STRING,&lt;br&gt;
  “accountId” BIGINT,&lt;br&gt;
  “createTime” STRING,&lt;br&gt;
  “isBlocked” BOOLEAN,&lt;br&gt;
  “accoutType” STRING,&lt;br&gt;
  “nickname” STRING,&lt;br&gt;
  “phonenum” STRING,&lt;br&gt;
  “email” STRING,&lt;br&gt;
  “freqLoginType” STRING,&lt;br&gt;
  “lastLoginTime” STRING,&lt;br&gt;
  “accountLevel” STRING&lt;br&gt;
) WITH (&lt;br&gt;
  ‘topic’ = ‘kafka-Account’,&lt;br&gt;
  ‘value.format’ = ‘JSON’&lt;br&gt;
);&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="800" height="400"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
CREATE STREAM account\_stream (
2. 
"label" STRING,
3. 
"accountId" BIGINT,
4. 
"createTime" STRING,
5. 
"isBlocked" BOOLEAN,
6. 
"accoutType" STRING,
7. 
"nickname" STRING,
8. 
"phonenum" STRING,
9. 
"email" STRING,
10. 
"freqLoginType" STRING,
11. 
"lastLoginTime" STRING,
12. 
"accountLevel" STRING
13. 
) WITH (
14. 
'topic' = 'kafka-Account',
15. 
'value.format' = 'JSON'
16. 
);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, we’ll define the &lt;em&gt;accountrepayloan_stream&lt;/em&gt; from the &lt;em&gt;kafka-AccountRepayLoan&lt;/em&gt; topic:&lt;/p&gt;

&lt;p&gt;CREATE STREAM accountrepayloan_stream (&lt;br&gt;
  “label” STRING,&lt;br&gt;
  “accountrepayloandid” BIGINT,&lt;br&gt;
  “loanId” BIGINT,&lt;br&gt;
  “amount” DOUBLE,&lt;br&gt;
  “createTime” STRING&lt;br&gt;
) WITH (&lt;br&gt;
  ‘topic’ = ‘kafka-AccountRepayLoan’,&lt;br&gt;
  ‘value.format’ = ‘JSON’&lt;br&gt;
);&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="800" height="400"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
CREATE STREAM accountrepayloan\_stream (
2. 
"label" STRING,
3. 
"accountrepayloandid" BIGINT,
4. 
"loanId" BIGINT,
5. 
"amount" DOUBLE,
6. 
"createTime" STRING
7. 
) WITH (
8. 
'topic' = 'kafka-AccountRepayLoan',
9. 
'value.format' = 'JSON'
10. 
);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And finally, we’ll show the &lt;em&gt;accounttransferaccount_stream&lt;/em&gt; from the &lt;em&gt;kafka-AccountTransferAccount&lt;/em&gt;. You’ll note there is both a &lt;em&gt;fromid&lt;/em&gt; and &lt;em&gt;toid&lt;/em&gt; that will like to the &lt;em&gt;loanId&lt;/em&gt;. This allows us to enrich data in the account payment stream with account information from the account_stream and combine it with the account transfer stream. &lt;/p&gt;

&lt;p&gt;With DeltaStream, this can then easily be written out as a more succinct and enriched stream of data to our destination, such as Snowflake or Databricks. We combine data from three streams with just the information we want, preparing the data in real-time from multiple streaming sources, which we then graph using PuppyGraph.&lt;/p&gt;

&lt;p&gt;CREATE STREAM accounttransferaccount_stream (&lt;br&gt;
  “label” VARCHAR,&lt;br&gt;
  “accounttransferaccountid”, BIGINT,&lt;br&gt;
  “fromd” BIGINT,&lt;br&gt;
  “toid” BIGINT,&lt;br&gt;
  “amount” DOUBLE,&lt;br&gt;
  “createTime” STRING,&lt;br&gt;
  “ordernum” BIGINT,&lt;br&gt;
  “comment” VARCHAR,&lt;br&gt;
  “paytype” VARCHAR,&lt;br&gt;
  “goodstype” VARCHAR&lt;br&gt;
) WITH (&lt;br&gt;
  ‘topic’ = ‘kafka-AccountTransferAccount’,&lt;br&gt;
  ‘value.format’ = ‘JSON’&lt;br&gt;
);&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="800" height="400"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
CREATE STREAM accounttransferaccount\_stream (
2. 
"label" VARCHAR,
3. 
"accounttransferaccountid", BIGINT,
4. 
"fromd" BIGINT,
5. 
"toid" BIGINT,
6. 
"amount" DOUBLE,
7. 
"createTime" STRING,
8. 
"ordernum" BIGINT,
9. 
"comment" VARCHAR,
10. 
"paytype" VARCHAR,
11. 
"goodstype" VARCHAR
12. 
) WITH (
13. 
'topic' = 'kafka-AccountTransferAccount',
14. 
'value.format' = 'JSON'
15. 
);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frr9qm3by7e4yxvsipb1t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frr9qm3by7e4yxvsipb1t.png" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Adding a Store for Integration
&lt;/h4&gt;

&lt;p&gt;PuppyGraph will connect to the stores and allow querying as a graph.&lt;/p&gt;

&lt;p&gt;Once our data is ready in the desired format, we can write streaming SQL queries in DeltaStream to write data continuously in the desired storage. In this case, we can use DeltaStream’s native integration with Snowflake or Databricks, where we will use PuppyGraph. Here is an example of writing data continuously into a table in Snowflake or Databricks from DeltaStream:&lt;/p&gt;

&lt;p&gt;CREATE TABLE ds_account&lt;br&gt;
WITH&lt;br&gt;
(&lt;br&gt;
‘store’ = ”&lt;/p&gt;

&lt;p&gt;) AS&lt;br&gt;
SELECT * FROM account_stream;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="800" height="400"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
CREATE TABLE ds\_account
2. 
WITH
3. 
(
4. 
'store' = '&amp;lt;store\_name&amp;gt;'
5. 
&amp;lt;Storage parameters&amp;gt;
6. 
) AS
7. 
SELECT \* FROM account\_stream;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;For Databricks integration, refer to the &lt;a href="https://docs.deltastream.io/tutorials/integrations/setting-up-and-integrating-databricks-with-your-organization" rel="noopener noreferrer"&gt;Databricks integration documentation&lt;/a&gt; for detailed steps.&lt;/li&gt;
&lt;li&gt;For Snowflake integration, refer to &lt;a href="https://docs.deltastream.io/tutorials/integrations/setting-up-and-integrating-snowflake-with-your-organization" rel="noopener noreferrer"&gt;Snowflake integration documentation&lt;/a&gt; for detailed steps.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Starting data processing
&lt;/h3&gt;

&lt;p&gt;Now, you can start a Kafka Producer to send the financial JSON data to Kafka. For example, to send account data, run:&lt;/p&gt;

&lt;p&gt;kafka-console-producer.sh –broker-list localhost:9092 –topic kafka-Account &amp;lt; json_data/Account.json&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="800" height="400"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
kafka-console-producer.sh --broker-list localhost:9092 --topic kafka-Account &amp;lt; json\_data/Account.json

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DeltaStream will process the data, and then we will query it as a graph.&lt;/p&gt;

&lt;h3&gt;
  
  
  Query your data as a graph
&lt;/h3&gt;

&lt;p&gt;You can start PuppyGraph using Docker. Then upload the Graph schema, and that’s it! You can now query the financial data as a graph as DeltaStream processes it.&lt;/p&gt;

&lt;p&gt;Start PuppyGraph using the following command:&lt;/p&gt;

&lt;p&gt;docker run -p 8081:8081 -p 8182:8182 -p 7687:7687 \&lt;br&gt;
-e DATAACCESS_DATA_CACHE_STRATEGY=adaptive \&lt;br&gt;
-e \&lt;br&gt;
–name puppy –rm -itd puppygraph/puppygraph:stable&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="800" height="400"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
docker run -p 8081:8081 -p 8182:8182 -p 7687:7687 \
2. 
-e DATAACCESS\_DATA\_CACHE\_STRATEGY=adaptive \
3. 
-e &amp;lt;STORAGE PARAMETERS&amp;gt; \
4. 
--name puppy --rm -itd puppygraph/puppygraph:stable

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Log into the PuppyGraph Web UI at &lt;a href="http://localhost:8081" rel="noopener noreferrer"&gt;http://localhost:8081&lt;/a&gt; with the following credentials:&lt;/p&gt;

&lt;p&gt;Username: puppygraph&lt;/p&gt;

&lt;p&gt;Password: puppygraph123&lt;/p&gt;

&lt;p&gt;Upload the schema:Select the file schema_.json in the Upload Graph Schema JSON section and click &lt;strong&gt;Upload&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F16thau0bc5pyzf6ig7z7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F16thau0bc5pyzf6ig7z7.png" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Navigate to the &lt;strong&gt;Query&lt;/strong&gt; panel on the left side. The &lt;strong&gt;Gremlin Query&lt;/strong&gt; tab offers an interactive environment for querying the graph using Gremlin. For example, to query the accounts owned by a specific company and the transaction records of these accounts, you can run:&lt;/p&gt;

&lt;p&gt;g.V(“Company[237]”)&lt;br&gt;
  .outE(‘CompanyOwnAccount’).inV()&lt;br&gt;
  .outE(‘AccountTransferAccount’).inV()&lt;br&gt;
  .path()&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="800" height="400"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 
g.V("Company[237]")
2. 
 .outE('CompanyOwnAccount').inV()
3. 
 .outE('AccountTransferAccount').inV()
4. 
 .path()

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7pq8fxhq571p0bl8dsgc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7pq8fxhq571p0bl8dsgc.png" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;As this blog post explores, traditional fraud detection methods simply can’t keep pace with today’s sophisticated criminals. Real-time analysis and the ability to identify complex patterns are critical. By combining the power of graph analytics with real-time stream processing, businesses can gain a significant advantage against fraudsters.&lt;/p&gt;

&lt;p&gt;PuppyGraph and DeltaStream offer robust and accessible solutions for building real-time dynamic fraud detection systems. We’ve seen how PuppyGraph unlocks hidden relationships and how DeltaStream analyzes real-time data to quickly and accurately identify and prevent fraudulent activity. Ready to take control and build a future-proof, graph-enabled fraud detection system? Try PuppyGraph and DeltaStream today. Visit &lt;a href="https://www.puppygraph.com/" rel="noopener noreferrer"&gt;PuppyGraph&lt;/a&gt; and &lt;a href="https://console.deltastream.io/" rel="noopener noreferrer"&gt;DeltaStream&lt;/a&gt; to get started!&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://www.deltastream.io/enhancing-fraud-detection-with-puppygraph-and-deltastream/" rel="noopener noreferrer"&gt;Enhancing Fraud Detection with PuppyGraph and DeltaStream&lt;/a&gt; appeared first on &lt;a href="https://www.deltastream.io" rel="noopener noreferrer"&gt;DeltaStream&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>streamprocessing</category>
      <category>puppygraph</category>
      <category>apacheflink</category>
    </item>
    <item>
      <title>What’s Coming in Apache Flink 2.0?</title>
      <dc:creator>kelsey-deltastream</dc:creator>
      <pubDate>Wed, 13 Nov 2024 01:10:44 +0000</pubDate>
      <link>https://dev.to/deltastream/whats-coming-in-apache-flink-20-15i6</link>
      <guid>https://dev.to/deltastream/whats-coming-in-apache-flink-20-15i6</guid>
      <description>&lt;h1&gt;What’s Coming in Apache Flink 2.0?&lt;/h1&gt;

&lt;p&gt;As &lt;a href="https://www.deltastream.io/why-apache-flink-is-the-industry-gold-standard/" rel="noopener noreferrer"&gt;champions for Apache Flink&lt;/a&gt;, we are excited for the 2.0 release and all that it will bring. &lt;a href="https://flink.apache.org/" rel="noopener noreferrer"&gt;Apache Flink&lt;/a&gt; 1.0 was released in 2016, and while we don’t have an exact release date, it looks like 2.0 will be released in late 2024/early 2025. &lt;a href="https://flink.apache.org/2024/08/02/announcing-the-release-of-apache-flink-1.20/" rel="noopener noreferrer"&gt;Version 1.2&lt;/a&gt; was just released in August 2024. Version 2.0 is set to be a major milestone release, marking a significant evolution in the stream processing framework. This blog runs down some of the key features and changes coming in &lt;a href="https://flink.apache.org/2024/10/23/preview-release-of-apache-flink-2.0/" rel="noopener noreferrer"&gt;Flink 2.0&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disaggregated State Storage and Management
&lt;/h2&gt;

&lt;p&gt;One of the most exciting features of Flink 2.0 is the introduction of disaggregated state storage and management. It will utilize a &lt;a href="https://www.techtarget.com/searchstorage/definition/distributed-file-system-DFS" rel="noopener noreferrer"&gt;Distributed File System (DFS)&lt;/a&gt; as the primary storage for state data. This architecture separates compute and storage resources, addressing key scalability and performance needs for large-scale, cloud-native data processing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Advantages of Disaggregated State Storage
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Improved Scalability&lt;/strong&gt;
By decoupling storage from compute resources, Flink can manage massive datasets—into the hundreds of terabytes—without being constrained by local storage. This separation enables efficient scaling in containerized and cloud environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced Recovery and Rescaling&lt;/strong&gt;
The new architecture supports faster state recovery on job restarts, efficient fault tolerance, and quicker job rescaling with minimal downtime. Key components include shareable checkpoints and LazyRestore for on-demand state recovery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimized I/O Performance&lt;/strong&gt;
Flink 2.0 uses asynchronous execution and grouped remote state access to minimize the latency impact of remote storage. A hybrid caching mechanism can improve cache efficiency, providing up to 80% better throughput than traditional file-level caching.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved Batch Processing&lt;/strong&gt;
Disaggregated state storage enhances batch processing by better handling large state data and integrating batch and stream processing tasks, making Flink more versatile across diverse workloads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Resource Management&lt;/strong&gt;
The architecture enables flexible resource allocation, minimizing CPU and network usage spikes during maintenance tasks like compaction and cleanup.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  API and Configuration Changes
&lt;/h2&gt;

&lt;p&gt;Several API and configuration changes will be introduced, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Removal of deprecated APIs, including the DataSet API and Scala versions of DataStream and DataSet APIs&lt;/li&gt;
&lt;li&gt;Deprecation of the legacy SinkFunction API in favor of the Unified Sink API&lt;/li&gt;
&lt;li&gt;Overhaul of the configuration layer, enhancing user-friendliness and maintainability&lt;/li&gt;
&lt;li&gt;Introduction of new abstractions such as Materialized Tables in v1.2 and further enhanced in v2&lt;/li&gt;
&lt;li&gt;Updates to configuration options, including proper type usage (e.g., Duration, Enum, Int)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Modernization and Unification
&lt;/h2&gt;

&lt;p&gt;Flink 2.0 aims to further unify batch and stream processing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modernization of legacy components, such as replacing the legacy &lt;a href="https://nightlies.apache.org/flink/flink-docs-release-1.20/api/java/org/apache/flink/streaming/api/functions/sink/SinkFunction.html" rel="noopener noreferrer"&gt;SinkFunction&lt;/a&gt; with the new &lt;a href="https://nightlies.apache.org/flink/flink-docs-release-1.20/api/java/org/apache/flink/api/connector/sink2/Sink.html" rel="noopener noreferrer"&gt;Unified Sink API&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Enhanced features that combine batch and stream processing seamlessly&lt;/li&gt;
&lt;li&gt;Improvements to Adaptive Batch Execution for optimizing logical and physical plans&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Performance Improvements
&lt;/h2&gt;

&lt;p&gt;The community is working on making Flink’s performance on bounded streams (batch use cases) competitive with dedicated batch processors. This can further simplify your data processing stack.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dynamic Partition Pruning (DPP) to minimize I/O costs&lt;/li&gt;
&lt;li&gt;Runtime Filter to reduce I/O and shuffle costs&lt;/li&gt;
&lt;li&gt;Operator Fusion CodeGen to improve query execution performance&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cloud-Native Focus
&lt;/h2&gt;

&lt;p&gt;Flink 2.0 is being designed with cloud-native architectures in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improved efficiency in containerized environments&lt;/li&gt;
&lt;li&gt;Better scalability for large state sizes&lt;/li&gt;
&lt;li&gt;More efficient fault tolerance and faster rescaling&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Summary of Flink 2.0
&lt;/h2&gt;

&lt;p&gt;This is an exciting time for Apache Flink 2.0. It represents a significant leap forward in unified batch and stream processing, focusing on cloud-native architectures, improved performance, and streamlined APIs. These changes aim to address the evolving needs of data-driven applications and set new standards for what’s possible in data processing. &lt;a href="https://www.deltastream.io/building-upon-apache-flink-for-better-stream-processing/" rel="noopener noreferrer"&gt;DeltaStream is proudly powered by Apache Flink&lt;/a&gt;, which makes it easy to start running Flink in minutes. &lt;a href="https://console.deltastream.io/?" rel="noopener noreferrer"&gt;Get a free trial of DeltaStream&lt;/a&gt; and see for yourself.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://www.deltastream.io/whats-coming-in-apache-flink-2-0/" rel="noopener noreferrer"&gt;What’s Coming in Apache Flink 2.0?&lt;/a&gt; appeared first on &lt;a href="https://www.deltastream.io" rel="noopener noreferrer"&gt;DeltaStream&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>technology</category>
    </item>
    <item>
      <title>Open Sourcing our Snowflake Connector for Apache Flink</title>
      <dc:creator>kelsey-deltastream</dc:creator>
      <pubDate>Wed, 06 Nov 2024 20:10:48 +0000</pubDate>
      <link>https://dev.to/deltastream/open-sourcing-our-snowflake-connector-for-apache-flink-12ob</link>
      <guid>https://dev.to/deltastream/open-sourcing-our-snowflake-connector-for-apache-flink-12ob</guid>
      <description>&lt;h4&gt;
  
  
  November 2024 Updates:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Support wider range of Apache Flink environments, including Managed Service for Apache Flink and BigQuery Engine for Apache Flink, with Java 11 and 17 support.&lt;/li&gt;
&lt;li&gt;Fixes an issue affecting &lt;a href="https://community.snowflake.com/s/article/faq-2023-client-driver-deprecation-for-GCP-customers" rel="noopener noreferrer"&gt;compatibility with Google Cloud Projects&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Upgraded to Apache Flink 1.19.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/deltastreaminc/flink-connector-snowflake/releases/tag/1.1.0-1.19" rel="noopener noreferrer"&gt;See full release details&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At &lt;a href="https://www.deltastream.io/?&amp;amp;" rel="noopener noreferrer"&gt;DeltaStream&lt;/a&gt; our mission is to bring a serverless and unified view of all streams to make stream processing possible for any product use case. By using &lt;a href="https://flink.apache.org/" rel="noopener noreferrer"&gt;Apache Flink&lt;/a&gt; as our underlying processing engine, we can leverage its rich connector ecosystem to connect to many different data systems, breaking down the barriers of siloed data. As we mentioned in our &lt;a href="https://www.deltastream.io/building-upon-apache-flink-for-better-stream-processing/?&amp;amp;" rel="noopener noreferrer"&gt;Building Upon Apache Flink for Better Stream Processing&lt;/a&gt; article, using Apache Flink is more than using robust software with a good track record at DeltaStream. Using Flink has allowed us to iterate faster on improvements or issues that arise from solving the latest and greatest data engineering challenges. However, one connector that was missing until today was the Snowflake connector.&lt;/p&gt;

&lt;p&gt;Today, in our efforts to make solving data challenges possible, we are open sourcing our Apache Flink sink connector built for writing data to &lt;a href="https://www.snowflake.com/en/" rel="noopener noreferrer"&gt;Snowflake&lt;/a&gt;. This connector has already provided DeltaStream with native integration between other sources of data and Snowflake. This also aligns well with our vision of providing a unified view over all data, and we want to open this project up for public use and contribution so that others in the Flink community can benefit from this connector as well.&lt;/p&gt;

&lt;p&gt;The open-source repository will be open for contributions, suggestions, or discussions. In this article, we touch on some of the highlights of this new Flink connector.&lt;/p&gt;

&lt;h2&gt;
  
  
  Utilizing the Snowflake Sink
&lt;/h2&gt;

&lt;p&gt;The Flink connector uses the latest Flink &lt;a href="https://nightlies.apache.org/flink/flink-docs-stable/api/java/org/apache/flink/api/connector/sink2/Sink.html" rel="noopener noreferrer"&gt;Sink&lt;/a&gt; and &lt;a href="https://nightlies.apache.org/flink/flink-docs-stable/api/java/org/apache/flink/api/connector/sink2/Sink.html" rel="noopener noreferrer"&gt;SinkWriter&lt;/a&gt; interfaces to build a Snowflake sink connector and write data to a configurable Snowflake table, respectively:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkgra2z25ers7chvaxe68.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkgra2z25ers7chvaxe68.png" width="800" height="650"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Diagram 1: Each SnowflakeSinkWriter inserts rows into Snowflake table using their own dedicated ingest channel&lt;/p&gt;

&lt;p&gt;The Snowflake sink connector can be configured with a parallelism of more than 1, where each task relies on the order of data it receives from its upstream &lt;a href="https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/dev/datastream/operators/overview/" rel="noopener noreferrer"&gt;operator&lt;/a&gt;. For example, the following shows how data can be written with parallelism of 3:&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
DataStream.sinkTo(SnowflakeSinkWriter).setParallelism(3);&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="800" height="400"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 

2. 
DataStream&amp;lt;InputT&amp;gt;.sinkTo(SnowflakeSinkWriter&amp;lt;InputT&amp;gt;).setParallelism(3);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Diagram 1&lt;/em&gt; shows the flow of data between TaskManager(s) and the destination Snowflake table. The diagram is heavily simplified to focus on the concrete &lt;code&gt;SnowflakeSinkWriter&amp;lt;InputT&amp;gt;&lt;/code&gt;, and it shows that each sink task connects to its Snowflake table using a dedicated &lt;a href="https://javadoc.io/doc/net.snowflake/snowflake-ingest-sdk/2.0.3/net/snowflake/ingest/streaming/SnowflakeStreamingIngestChannel.html" rel="noopener noreferrer"&gt;SnowflakeStreamingIngestChannel&lt;/a&gt; from Snowpipe Streaming APIs.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;SnowflakeSink&amp;lt;InputT&amp;gt;&lt;/code&gt; is also shipped with a generic &lt;code&gt;SnowflakeRowSerializationSchema&amp;lt;T&amp;gt;&lt;/code&gt; interface that allows each implementation of the sink to provide its own concrete serialization to a Snowflake row of &lt;code&gt;Map&amp;lt;String, Object&amp;gt;&lt;/code&gt; based on a given use case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Write Records At Least Once
&lt;/h2&gt;

&lt;p&gt;The first version of the Snowflake sink can write data into Snowflake tables with the delivery guarantee of NONE or AT_LEAST_ONCE, using AT_LEAST_ONCE by default. Supporting EXACTLY_ONCE semantics is a goal for a future version of this connector.&lt;/p&gt;

&lt;p&gt;The sink writes data into its destination table after buffering records for a fixed time interval. This buffering time interval is also bounded by &lt;a href="https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/dev/datastream/fault-tolerance/checkpointing/" rel="noopener noreferrer"&gt;Flink’s checkpointing&lt;/a&gt; interval, which is configured as part of the &lt;a href="https://nightlies.apache.org/flink/flink-docs-stable/api/java/org/apache/flink/streaming/api/environment/StreamExecutionEnvironment.html" rel="noopener noreferrer"&gt;StreamExecutionEnvironment&lt;/a&gt;. In other words, if Flink’s checkpointing interval and buffering time are configured to be different values, then records are flushed as fast as the shorter interval:&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();&lt;br&gt;
env.enableCheckpointing(100L);&lt;br&gt;
…&lt;br&gt;
SnowflakeSink&amp;lt;Map&amp;gt; sf_sink = SnowflakeSink.builder()&lt;br&gt;
    .bufferTimeMillis(1000L)&lt;br&gt;
    …&lt;br&gt;
    .build(jobId);&lt;br&gt;
env.fromSequence(1, 10).map(new SfRowMapFunction()).sinkTo(sf_sink);&lt;br&gt;
env.execute();&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.deltastream.io%2Fwp-content%2Fthemes%2Fdelta-stream%2Facf%2Fblocks%2Fpost-code%2Fimg%2Fcopy-code-icon.svg" alt="copy" width="800" height="400"&gt;&lt;/a&gt;&lt;span&gt;Copy Code&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
1. 

2. 
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
3. 
env.enableCheckpointing(100L);
4. 
…
5. 
SnowflakeSink&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; sf\_sink = SnowflakeSink.&amp;lt;Row&amp;gt;builder()
6. 
 .bufferTimeMillis(1000L)
7. 
 …
8. 
 .build(jobId);
9. 
env.fromSequence(1, 10).map(new SfRowMapFunction()).sinkTo(sf\_sink);
10. 
env.execute();

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the checkpointing interval is set to 100 milliseconds, and the buffering interval is configured as 1 second.  This tells the Flink job to flush the records at least every 100 milliseconds, i.e., on every checkpoint.&lt;/p&gt;

&lt;p&gt;Read more about &lt;a href="https://docs.snowflake.com/en/user-guide/data-load-snowpipe-streaming-recommendation" rel="noopener noreferrer"&gt;Snowpipe Streaming best practices&lt;/a&gt; in the Snowflake documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Flink Community, to Infinity and Beyond
&lt;/h2&gt;

&lt;p&gt;We are very excited about the opportunity to contribute our Snowflake connector to the Flink community. We’re hoping this connector will add more value to the rich connector ecosystem of Flink that’s powering many data application use cases.If you want to check out the connector for yourself, head over to &lt;a href="https://github.com/deltastreaminc/flink-connector-snowflake" rel="noopener noreferrer"&gt;the GitHub repository&lt;/a&gt;. Or if you want to learn more about DeltaStream’s integration with Snowflake, read &lt;a href="https://www.deltastream.io/integrating-deltastream-and-snowflake/?&amp;amp;" rel="noopener noreferrer"&gt;our Snowflake integration blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://www.deltastream.io/open-sourcing-our-snowflake-connector-for-apache-flink/" rel="noopener noreferrer"&gt;Open Sourcing our Snowflake Connector for Apache Flink&lt;/a&gt; appeared first on &lt;a href="https://www.deltastream.io" rel="noopener noreferrer"&gt;DeltaStream&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>news</category>
    </item>
    <item>
      <title>A Guide to Standard SQL vs. Streaming SQL: Why Do We Need Both?</title>
      <dc:creator>kelsey-deltastream</dc:creator>
      <pubDate>Tue, 29 Oct 2024 17:41:46 +0000</pubDate>
      <link>https://dev.to/deltastream/a-guide-to-standard-sql-vs-streaming-sql-why-do-we-need-both-342b</link>
      <guid>https://dev.to/deltastream/a-guide-to-standard-sql-vs-streaming-sql-why-do-we-need-both-342b</guid>
      <description>&lt;h2&gt;
  
  
  Understanding the Differences Between Standard SQL and Streaming SQL
&lt;/h2&gt;

&lt;p&gt;SQL has long been a foundational tool for querying databases. Traditional SQL queries are typically run against static, historical data, generating a snapshot of results at a single point in time. However, the rise of real-time data processing, driven by applications like IoT, financial transactions, security monitoring/intrusion, and social media, has led to the evolution of &lt;strong&gt;Streaming SQL&lt;/strong&gt;. This variant extends traditional SQL capabilities, offering features specifically designed for real-time, continuous data streams. &lt;/p&gt;

&lt;h2&gt;
  
  
  Standard SQL and Streaming SQL Key Differences
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Point-in-Time vs. Continuous Queries
&lt;/h3&gt;

&lt;p&gt;In standard SQL, queries are typically run once and return results based on a snapshot of data. For instance, when you query a traditional database to get the sum of all sales, it reflects only the state of data up until the moment of the query.&lt;/p&gt;

&lt;p&gt;In contrast, &lt;strong&gt;Streaming SQL&lt;/strong&gt; works with data that continuously flows in, updating queries in real-time. The same query can be run in streaming SQL, but instead of receiving a one-time result, the query is maintained in a &lt;strong&gt;&lt;a href="https://www.deltastream.io/all-about-streaming-data-mesh/" rel="noopener noreferrer"&gt;materialized view&lt;/a&gt;&lt;/strong&gt; that updates as new data arrives. This is especially useful for use cases like dashboards or monitoring systems, where the data needs to stay current.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Real-Time Processing with Window Functions
&lt;/h3&gt;

&lt;p&gt;Streaming SQL introduces &lt;strong&gt;window functions&lt;/strong&gt; , allowing users to segment a data stream into windows for aggregation or analysis. For example, a &lt;strong&gt;tumbling window&lt;/strong&gt; is a fixed-length window (such as one minute) that collects data for aggregation over that time frame. In contrast, a &lt;strong&gt;hopping window&lt;/strong&gt; is a fixed-size time interval that will hop by a specified length. That means if you want to calculate the current inventory every two minutes but update the results every minute, the hopping window would then be two minutes, and the hop size would be a minute.&lt;/p&gt;

&lt;p&gt;Windowing in traditional SQL is static and backward-looking, whereas in streaming SQL, real-time streams are processed continuously, updating aggregations within the described window.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Watermarks for Late Data Handling
&lt;/h3&gt;

&lt;p&gt;In streaming environments, data can arrive late or out of order. To manage this, Streaming SQL introduces &lt;strong&gt;watermarks&lt;/strong&gt;.  Watermarks mark the point in time up to which the system expects to have received data. For instance, if an event is delayed by a minute, a watermark ensures it’s still processed if it arrives within that window, making streaming SQL robust for real-world, unpredictable data flows. Conventional SQL has no ability or need to address this scenario.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Continuous Materialization
&lt;/h3&gt;

&lt;p&gt;One of the unique aspects of Streaming SQL is the ability to &lt;strong&gt;materialize views&lt;/strong&gt; incrementally. Unlike traditional databases that recompute queries when data changes, streaming SQL continuously maintains these views as new data flows in. This approach dramatically improves performance for real-time analytics by avoiding expensive re-computations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Cases for Streaming SQL
&lt;/h2&gt;

&lt;p&gt;The rise of streaming SQL has been a game-changer across industries. Common applications include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time analytics dashboards, such as stock trading platforms or retail systems where quick insights are needed to make rapid decisions.&lt;/li&gt;
&lt;li&gt;Event-driven applications where alerts and automations are triggered by real-time data, such as &lt;a href="https://www.deltastream.io/detecting-suspicious-login-activity-with-stream-processing/" rel="noopener noreferrer"&gt;fraud detection&lt;/a&gt; or &lt;a href="https://www.deltastream.io/stream-processing-for-iot-data/" rel="noopener noreferrer"&gt;IoT sensor monitoring&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Real-time customer personalization, where user actions or preferences update in real-time to deliver timely recommendations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;While &lt;strong&gt;Standard SQL&lt;/strong&gt; excels in querying static, historical datasets, &lt;strong&gt;Streaming SQL&lt;/strong&gt; is optimized for real-time data streams, offering powerful features like window functions, watermarks, and materialized views. These advancements handle fast-changing data with low latency, offering immediate insights and automation. This &lt;a href="https://www.datanami.com/2023/07/12/yes-real-time-streaming-data-is-still-growing/" rel="noopener noreferrer"&gt;article at Datanami&lt;/a&gt; in July 2023 pegged 177% growth in streaming adoption in the previous 12 months. As more industries rely on real-time decision-making, streaming SQL is becoming a critical tool for modern data infrastructures.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://www.deltastream.io/a-guide-to-standard-sql-vs-streaming-sql/" rel="noopener noreferrer"&gt;A Guide to Standard SQL vs. Streaming SQL: Why Do We Need Both?&lt;/a&gt; appeared first on &lt;a href="https://www.deltastream.io" rel="noopener noreferrer"&gt;DeltaStream&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>technology</category>
    </item>
    <item>
      <title>Democratizing Data with All-in-One Streaming Solutions</title>
      <dc:creator>kelsey-deltastream</dc:creator>
      <pubDate>Wed, 23 Oct 2024 20:15:18 +0000</pubDate>
      <link>https://dev.to/deltastream/democratizing-data-with-all-in-one-streaming-solutions-8ba</link>
      <guid>https://dev.to/deltastream/democratizing-data-with-all-in-one-streaming-solutions-8ba</guid>
      <description>&lt;p&gt;In today’s fast-paced data landscape, &lt;a href="https://www.deltastream.io/key-components-of-a-modern-data-stack/" rel="noopener noreferrer"&gt;organizations must maximize efficiency&lt;/a&gt;, enhance collaboration, and maintain data quality. An all-in-one streaming data solution offers a single, integrated platform for real-time data processing, which simplifies operations, reduces costs, and makes advanced tools accessible across teams. &lt;/p&gt;

&lt;p&gt;This blog explores the benefits of such solutions and their role in promoting a democratized data culture.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Key Benefits of All-in-One Streaming Data Solutions&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Streamlined Learning Curve&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;All-in-one platforms simplify adoption by providing a single interface, unlike traditional setups requiring expertise in multiple tools and languages. This accelerates adoption and facilitates collaboration across teams.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Consolidated Toolset&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;By merging data integration, processing, and visualization into a unified system, these platforms eliminate the need to manage multiple applications. Teams can perform tasks like joins, filtering, and creating materialized views within one environment, improving workflow efficiency.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Simplified Language Support&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Most all-in-one platforms use a common language, such as SQL, for all data operations. This reduces the need for proficiency in multiple languages, streamlines processes, and enables easier collaboration between team members.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Enhanced Security and Compliance&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;With centralized security controls, these platforms simplify the enforcement of compliance standards like GDPR and HIPAA. Fewer components reduce vulnerabilities, providing a more secure data environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Cost Savings&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Managing multiple tools leads to increased costs, both in licensing and staffing. An all-in-one solution consolidates these tools, reducing expenses and providing long-term cost stability.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Improved Data Quality&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Using a single platform for all data operations—collection, transformation, streaming, and analysis—minimizes errors and ensures consistent validation, resulting in more accurate and reliable insights.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Centralized Platform for Unified Operations&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;An all-in-one solution enables teams to handle all aspects of data processing on one platform, from combining datasets to filtering large volumes of data and creating materialized views for real-time access. This integrated approach reduces errors and boosts operational efficiency.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Single Interface for Event Streams&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;These platforms provide a &lt;a href="https://www.deltastream.io/data-unification-in-real-time-stream-processing/" rel="noopener noreferrer"&gt;single interface to access and work with event streams&lt;/a&gt;, regardless of location or device. This consistent access allows teams to monitor and manage streams globally, facilitating seamless data handling across distributed environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Breaking Down Silos&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;All-in-one platforms promote collaboration by breaking down data silos, enabling cross-functional teams to work with shared data in real-time. Whether in marketing, sales, engineering, or product development, everyone has access to the same data streams, facilitating collaboration and maximizing the value of data.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Democratized Data Access and Collaboration&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Centralized Data Access&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In traditional environments, only a few technical users control critical data pipelines. An all-in-one solution &lt;a href="https://www.deltastream.io/secure-sharing-for-real-time-data-streams/" rel="noopener noreferrer"&gt;democratizes data by giving all team members access&lt;/a&gt; to the same tools, empowering them to make data-driven decisions regardless of technical expertise.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Simplified Data Analysis&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;These platforms provide intuitive tools for querying and visualizing data, allowing less technically sophisticated users to engage in data analysis. This extends the role of data across the organization, improving decision-making and fostering collaboration.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Cross-Functional Collaboration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The integration of all tools into a single platform enhances collaboration across functions. Teams from different departments can work together more efficiently, aligning on data-driven strategies without needing to navigate disparate systems or fight through inconsistent user access, i.e., some people may have access to tools A and B while others only to tools C and D.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Reduced Effort&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;With only one platform to learn, teams experience reduced effort and cognitive load, freeing up more time to focus on deriving insights rather than managing multiple tools. This ease of use encourages widespread adoption and enhances overall productivity.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Scalability and Flexibility&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;All-in-one solutions are designed for scalability, enabling organizations to grow without constantly adopting new tools or overhauling systems. Whether increasing data streams or integrating new sources, these platforms scale effortlessly with business needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Is this the promise of Data Mesh? All-in-one streaming data solutions are revolutionizing how organizations handle real-time data. By consolidating tools, simplifying workflows, and fostering collaboration, these platforms democratize data access while maintaining data quality and operational efficiency. Whether you’re a small team seeking streamlined processes or a large enterprise focused on scalability, the benefits of an all-in-one solution are clear. Investing in such platforms is a strategic move to unlock the full potential of real-time data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgkl2sggyqgr6pqqma6yo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgkl2sggyqgr6pqqma6yo.png" width="800" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DeltaStream can be part of your toolbox, supporting the shift-left paradigm for operational efficiency. If you’re interested in giving it a try, &lt;a href="https://console.deltastream.io/" rel="noopener noreferrer"&gt;sign up for a free trial&lt;/a&gt; or &lt;a href="https://www.deltastream.io/contact-us/" rel="noopener noreferrer"&gt;contact us for a demo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://www.deltastream.io/democratizing-data-with-all-in-one-streaming-solutions/" rel="noopener noreferrer"&gt;Democratizing Data with All-in-One Streaming Solutions&lt;/a&gt; appeared first on &lt;a href="https://www.deltastream.io" rel="noopener noreferrer"&gt;DeltaStream&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>technology</category>
    </item>
    <item>
      <title>Streaming Analytics vs. Real-time Analytics: Key Differences to Know</title>
      <dc:creator>kelsey-deltastream</dc:creator>
      <pubDate>Tue, 01 Oct 2024 20:25:35 +0000</pubDate>
      <link>https://dev.to/deltastream/streaming-analytics-vs-real-time-analytics-key-differences-to-know-42p0</link>
      <guid>https://dev.to/deltastream/streaming-analytics-vs-real-time-analytics-key-differences-to-know-42p0</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Businesses rely heavily on timely insights to make informed decisions in today’s data-driven world. Two key approaches that enable organizations to derive value from their data as it is generated are &lt;strong&gt;streaming analytics&lt;/strong&gt; and &lt;strong&gt;real-time analytics&lt;/strong&gt;. While both terms are often used interchangeably, they differ in their operation and the types of use cases they address. This blog post will delve into the core differences between streaming, and real-time analytics, their respective architectures, and practical applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Defining Streaming and Real-Time Analytics
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Streaming Analytics:&lt;/strong&gt; Streaming analytics refers to analyzing and acting on data as it flows into the system continuously. Data is processed in real-time as it is ingested, typically in small, unbounded batches or event streams. These streams come from various sources like IoT devices, log files, and social media, with the analytics system making decisions or generating insights from the live data.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-Time Analytics:&lt;/strong&gt; Real-time analytics, while similar in time sensitivity, typically involves processing a dataset or query with minimal latency. It involves quickly processing data to provide near-instantaneous insights, although the data is often stored or batched before it is analyzed. Real-time analytics operates in response to queries where results are expected from data as it enters the system, such as personalized advertising. Typically there are two types:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;On-demand:&lt;/strong&gt; Provides analytic results only when a query is submitted.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Continuous:&lt;/strong&gt; Proactively sends alerts or triggers responses in other systems as the data is generated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Differences in Data Ingestion and Processing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Streaming Analytics:&lt;/strong&gt; In streaming analytics, data is processed in motion. As the data arrives in the system, it is immediately ingested and analyzed. The focus is on processing and analyzing the continuous flow of data, often in a windowed manner, to derive immediate actions from the data stream. This involves handling large volumes of unbounded, real-time data flows.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt; : A fraud detection system in a bank continuously monitors transactions. The moment &lt;a href="https://www.deltastream.io/detecting-suspicious-login-activity-with-stream-processing/" rel="noopener noreferrer"&gt;suspicious activity is detected from a stream of transaction data&lt;/a&gt;, the system flags or blocks the transaction in real time.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-Time Analytics:&lt;/strong&gt; While real-time analytics also deals with fast-moving data, it focuses on responding to queries in real time. The data might already reside in databases, and the system retrieves and processes it almost instantaneously when requested. This method is often less continuous than streaming analytics, but it’s still geared towards low-latency responses.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt; : A dashboard monitoring a retail chain’s sales might be refreshed every minute to reflect the latest sales data. Even though the updates are frequent, the data comes from a batched set that is processed in real time rather than directly from an event stream.&lt;/p&gt;

&lt;h2&gt;
  
  
  Latency and Time Sensitivity Distinctions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Streaming Analytics:&lt;/strong&gt; Streaming analytics systems are designed to handle extremely low latency, as the focus is on processing data instantly as it arrives. This is critical in situations where immediate insights are required, like automated decision-making in fraud detection, predictive maintenance, or dynamic pricing. Streaming analytics typically involves sub-second latency, allowing for almost instantaneous actions based on data.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-Time Analytics:&lt;/strong&gt; Real-time analytics also aims for low latency, but the data may be processed in slightly larger windows (seconds or minutes). The insights provided by real-time analytics are often near real-time, and acceptable latency can range from milliseconds to a few seconds, depending on the system’s requirements. Real-time analytics may involve batch processing, where the data is aggregated and processed as needed, rather than on a continuous stream.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contrasting Architecture and Tools
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Streaming Analytics&lt;/strong&gt; : The architecture for streaming analytics is built around continuous data flows. The tools and platforms used for streaming analytics—such as &lt;a href="https://kafka.apache.org/" rel="noopener noreferrer"&gt;Apache Kafka&lt;/a&gt;, &lt;a href="https://flink.apache.org/" rel="noopener noreferrer"&gt;Apache Flink&lt;/a&gt;, and &lt;a href="https://storm.apache.org/" rel="noopener noreferrer"&gt;Apache Storm&lt;/a&gt;—are designed to support data streams and perform calculations on the fly. The architecture involves source systems that generate continuous streams of events, a processing engine that can handle this real-time input, and sinks that store or act on the processed data.  &lt;/p&gt;

&lt;p&gt;Streaming analytics systems often incorporate concepts like &lt;strong&gt;event-driven architecture&lt;/strong&gt; and &lt;strong&gt;micro-batching&lt;/strong&gt; , where data is split into tiny batches to be processed almost instantaneously. The key focus is on scalability and the ability to handle high-throughput streams with very low latency.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-Time Analytics:&lt;/strong&gt; Real-time analytics architecture is often centered around fast querying and low-latency data retrieval from storage. Systems like &lt;a href="https://pinot.apache.org/" rel="noopener noreferrer"&gt;Apache Pinot&lt;/a&gt;, &lt;a href="https://druid.apache.org/" rel="noopener noreferrer"&gt;Apache Druid&lt;/a&gt;, and in-memory databases like &lt;a href="https://memcached.org/" rel="noopener noreferrer"&gt;Memcached&lt;/a&gt; are frequently used to achieve real-time query performance. Data is often ingested in bursts, cleaned, stored, and queried using systems optimized for low-latency access, such as in-memory or columnar databases.  &lt;/p&gt;

&lt;p&gt;While it can handle streaming data, real-time analytics systems usually aggregate and store data first, making it suitable for reporting and dashboarding where up-to-the-second freshness is only sometimes critical but very close to real time is required.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjaenq2iidcxo9v27z731.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjaenq2iidcxo9v27z731.png" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Streaming and Real-time Analytics Use Cases
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Streaming Analytics:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;IoT Sensor Monitoring:&lt;/strong&gt; Where devices continuously generate data, &lt;a href="https://www.deltastream.io/stream-processing-for-iot-data/" rel="noopener noreferrer"&gt;analytics systems monitor this data in real time&lt;/a&gt; to detect anomalies or trigger automated responses.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Stock Market and High-Frequency Trading:&lt;/strong&gt; In financial markets, price data, transaction volumes, and other metrics must be processed in real time to make split-second trading decisions.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Social Media Monitoring&lt;/strong&gt; : For businesses that rely on sentiment analysis or real-time social media engagement, streaming analytics helps gauge public reaction instantly, allowing businesses to respond immediately.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-Time Analytics:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Customer Personalization:&lt;/strong&gt; In e-commerce, real-time analytics helps provide personalized recommendations by processing customer interaction data stored in databases, delivering insights in near real-time during customer sessions.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Operational Dashboards:&lt;/strong&gt; Many organizations utilize real-time analytics for internal monitoring, where data on sales, system health, or customer interactions is processed quickly but not instantaneously, such as refreshing every minute.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Dynamic Pricing&lt;/strong&gt; : Real-time analytics can be used to adjust pricing based on historical sales and demand data that is processed every few minutes or hours.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges with Streaming and Real-time Analytics
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Streaming Analytics:&lt;/strong&gt; One of the main challenges is dealing with the constant flow of high-velocity data. Ensuring data consistency, scaling infrastructure to handle bursts in data streams, and maintaining sub-second latency requires sophisticated engineering solutions. Another challenge is managing “event time” versus “processing time,” where events arrive out of order or late.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-Time Analytics:&lt;/strong&gt; Real-time analytics faces the challenge of balancing query performance with data freshness. Storing and retrieving large volumes of data with low latency is difficult without optimized database architectures. Additionally, ensuring that the data queried reflects the most recent information without overwhelming the system requires careful tuning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;While both streaming and real-time analytics offer rapid data processing and insights, they serve different purposes depending on the specific use case. Streaming analytics excels in environments where decisions must be made instantly on data as it arrives, making it ideal for real-time monitoring and automated responses. Real-time analytics, on the other hand, offers low-latency querying for decision-making where instantaneous data streams aren’t necessary but timely responses are critical.  &lt;/p&gt;

&lt;p&gt;If your use case requires sub-second latency, consider technologies like DeltaStream. It handles both Streaming Analytics and acts as a Streaming Database, supporting the shift-left paradigm for operational efficiency. If you’re interested in giving it a try, &lt;a href="https://console.deltastream.io/" rel="noopener noreferrer"&gt;sign up for a free trial&lt;/a&gt; or &lt;a href="https://www.deltastream.io/contact-us/?&amp;amp;" rel="noopener noreferrer"&gt;contact us for a demo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://www.deltastream.io/streaming-analytics-real-time-analytics-key-differences/" rel="noopener noreferrer"&gt;Streaming Analytics vs. Real-time Analytics: Key Differences to Know&lt;/a&gt; appeared first on &lt;a href="https://www.deltastream.io" rel="noopener noreferrer"&gt;DeltaStream&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>technology</category>
    </item>
  </channel>
</rss>
