blob: 3f6d126bea78084136cf6e228349ff6dedf3fffa [file] [log] [blame]
<!DOCTYPE html>
<html lang="en"><head>
<meta charset="utf-8">
<title>Understanding stream table duality using Kafka, Flink SQL and Debezium format | Community Over Code Europe</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description"
content="Community Over Code Europe is the annual gathering in Europe of the Apache Software Foundation community.">
<meta name="generator" content="Hugo 0.119.0"><meta property="og:title" content="Understanding stream table duality using Kafka, Flink SQL and Debezium format" />
<meta property="og:description" content="Kafka Streams, ksqlDB or Flink SQL are popular processing engines that enable us to run SQL queries on top of streaming data. Isn&rsquo;t it fascinating that we can run SQL queries on top of streaming data as if they were relational tables, or convert a table into a stream of changelog events? This is known as the stream-table duality.
In this talk we will try to understand how it works under the hood using Flink SQL, Kafka connector with Debezium JSON/Avro format." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://eu.communityovercode.org/sessions/2024/understanding-stream-table-duality-using-kafka-flink-sql-and-debezium-format/" /><meta property="og:image" content="https://eu.communityovercode.org/images/card.jpg"/><meta property="article:section" content="sessions" />
<meta name="twitter:card" content="summary_large_image"/>
<meta name="twitter:image" content="https://eu.communityovercode.org/images/card.jpg"/>
<meta name="twitter:title" content="Understanding stream table duality using Kafka, Flink SQL and Debezium format"/>
<meta name="twitter:description" content="Kafka Streams, ksqlDB or Flink SQL are popular processing engines that enable us to run SQL queries on top of streaming data. Isn&rsquo;t it fascinating that we can run SQL queries on top of streaming data as if they were relational tables, or convert a table into a stream of changelog events? This is known as the stream-table duality.
In this talk we will try to understand how it works under the hood using Flink SQL, Kafka connector with Debezium JSON/Avro format."/>
<!-- plugins -->
<link rel="stylesheet" href="/plugins/bootstrap.min.css">
<link rel="stylesheet" href="/plugins/bootstrap-table.min.css">
<link rel="stylesheet" href="/plugins/fontawesome.css">
<!-- Main Stylesheet -->
<link rel="stylesheet" href='/scss/style.min.css?v=202406201555' media="screen">
<!--Favicon-->
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="icon" href="/favicon.ico" type="image/x-icon">
</head><body class="interior">
<header class="header-bar">
<nav class="navbar navbar-expand-lg main-nav navbar-light fixed-top">
<a class="navbar-brand ml-4 pb-2" href='/'>
<img src="/images/coc-logo-color.svg" alt="Community Over Code Europe" class="img-fluid logo-b">
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navigation"
aria-controls="navigation" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse text-center my-auto" id="navigation">
<ul class="navbar-nav me-auto align-items-center">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false">
About
</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="/about">Community Over Code</a>
<a class="dropdown-item" href="/about-the-asf">About the ASF</a>
<a class="dropdown-item" href="/diversity-and-inclusion">Diversity &amp; Inclusion</a>
</div>
</li>
<li class="nav-item">
<a class="nav-link" href="/program">Program</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/speakers">Speakers</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false">
Venue
</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="/venue">About the venue</a>
<a class="dropdown-item" href="/how-to-get-there">How to get there</a>
</div>
</li>
<li class="nav-item">
<a class="nav-link" href="/#latest-news">News</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/faq">FAQ</a>
</li>
<li class="nav-item">
<a id="nav-button" href="/tickets" class="btn btn-orange text-white btn-rounded">Tickets</a>
</li>
</ul>
</div>
</nav>
</header>
<section class="page-header">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8">
<div class="content text-center">
<h1 class="mb-3">Understanding stream table duality using Kafka, Flink SQL and Debezium format</h1>
<div class="divider mx-auto mb-4 bg-secondary"></div>
</div>
</div>
</div>
</div>
</section>
<section class="speaker-detail">
<div class="container">
<div class="row mt-4">
<div class="image-column col-lg-3 d-none d-lg-block">
<div class="schedule-block col-lg-10 col-md-12 col-sm-12">
<div class="sec-title text-center">
<span class="title">Speaker(s):</span>
<div class="speaker-info" style="margin-bottom: 20px;">
<figure class="thumb my-3">
<a href="/speakers/muhammet-orazov/">
<div class="img-container">
<img src="/images/speakers/muhammet-orazov_hu97e88dfdaae4b6e7cf533a08ce4cead5_128799_400x0_resize_q75_h2_box.webp" alt="Photo of images/speakers/muhammet-orazov.jpg" class="img-fluid rounded-circle">
</div>
<h5 class="name">Muhammet Orazov</h5>
</a>
</figure>
</div>
</div>
</div>
</div>
<div class="info-column col-lg-9 col-md-12 col-sm-12">
<div class="inner-column">
<div class="text-box">
<div class="session-meta" id="date">
<div>
<em>Jun-05 16:00-16:30 in Rhapsody</em>
</div>
<div class="d-lg-none d-xl-none">
By
<a class="speaker-inline-item" href="https://eu.communityovercode.org/speakers/muhammet-orazov/">Muhammet Orazov</a>
</div>
<div class="content mt-4"><p>Kafka Streams, ksqlDB or Flink SQL are popular processing engines that enable us to run SQL queries on top of streaming data. Isn&rsquo;t it fascinating that we can run SQL queries on top of streaming data as if they were relational tables, or convert a table into a stream of changelog events? This is known as the stream-table duality.</p>
<p>In this talk we will try to understand how it works under the hood using Flink SQL, Kafka connector with Debezium JSON/Avro format.</p>
<p>The following points will be presented and discussed:</p>
<ul>
<li>
<p>What is stream-table duality?</p>
</li>
<li>
<p>Change data capture (CDC) event descriptions</p>
</li>
<li>
<p>SQL queries on top of changelog data</p>
</li>
<li>
<p>Short Demo</p>
</li>
<li>
<p>Conclusion and Q&amp;A</p>
</li>
</ul>
<p>At the conclusion of the presentation, the attendees will possess a more comprehensive understanding of stream-table duality, how it works in practice, and how to apply it into their own systems.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<footer>
<div class="container-fluid">
<div class="container py-5">
<div class="d-flex justify-content-between">
<div class="col-6 col-md-4 col-lg-3">
<div class="mb-3"> <img src="/images/logo-h.svg" class="img-fluid" alt="Community Over Code Europe"></div>
<ul class="list-inline mb-0">
<li class="list-inline-item mx-2 h3" data-toggle="tooltip" data-placement="top" title aria-label="Email us" data-original-title="Email us">
<a title="Email us" target="_blank" href="mailto:coceu@sg.com.mx?subject=[EU]">
<i class="fa fa-envelope" aria-hidden="true"></i>
</a>
</li>
<li class="list-inline-item mx-2 h3" data-toggle="tooltip" data-placement="top" title aria-label="Slack" data-original-title="Slack">
<a title="Slack" target="_blank" href="https://s.apache.org/apachecon-slack">
<i class="fab fa-slack" aria-hidden="true"></i>
</a>
</li>
<li class="list-inline-item mx-2 h3" data-toggle="tooltip" data-placement="top" title aria-label="Watch us on YouTube" data-original-title="Watch us on YouTube">
<a title="Watch us on YouTube" target="_blank" href="https://www.youtube.com/@communityovercode">
<i class="fab fa-youtube" aria-hidden="true"></i>
</a>
</li>
</ul>
</div>
<div class="col-md-6 text-right">
<div class="footer-links">
<ul>
<li><a href="/coc" >
Code of Conduct
</a></li>
<li><a href="/accessibility" >
Accessibility
</a></li>
<li><a href="/privacy" >
Privacy Policy
</a></li>
<li><a href="/team" >
Organizers
</a></li>
<li><a href="https://communityovercode.org/wp-content/uploads/2023/12/community-over-code-prospectus-2024.pdf" >
Prospectus
</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="footer-section footer-section__policies-section bg-dark">
<div class="container my-0 footer-section__policies-section--disclaimer">
Community Over Code operates under the terms of <a href="https://apache.org/foundation/policies/conduct">The ASF Code of Conduct</a>.
</div>
</div>
</footer>
<!-- JS Plugins -->
<script src="/plugins/jquery.min.js"></script>
<script src="/plugins/bootstrap.bundle.min.js"></script>
<script src="/plugins/bootstrap-table.min.js"></script>
<script src="/plugins/bootstrap-table.min.js"></script>
<script src="https://js.tito.io/v2"></script>
<script>
var _paq = window._paq = window._paq || [];
_paq.push(["disableCookies"]);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="https://analytics.apache.org/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '39']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
</body>
</html>