{"id":1986,"date":"2021-02-03T09:05:42","date_gmt":"2021-02-03T09:05:42","guid":{"rendered":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/?p=1986"},"modified":"2021-05-19T06:20:17","modified_gmt":"2021-05-19T06:20:17","slug":"datenbankaenderungen-teil-1","status":"publish","type":"post","link":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/","title":{"rendered":"Datenbank\u00e4nderungen erkennen und streamen mit Debezium und Apache Kafka (Teil 1) \u2013 Die Theorie"},"content":{"rendered":"\n<p>In nahezu jedem Unternehmensumfeld spielen Datenbanken, insbesondere relationale Datenbanken, eine gro\u00dfe Rolle. In ihnen werden sowohl die Stammdaten von Mitarbeitern, Kunden etc. als auch die sich st\u00e4ndig \u00e4ndernden Bewegungsdaten des Unternehmens verwaltet. Aus den verschiedensten Gr\u00fcnden k\u00f6nnen sich nun f\u00fcr betreffende Firmen neue Anforderungen ergeben, so dass die \u00c4nderungen der Bewegungsdaten in Echtzeit in anderen Prozessen und Applikationen weiterverarbeitet werden m\u00fcssen \u2013 wie bspw. bei Buchungen in einem System. Daf\u00fcr reicht es nicht mehr aus, dass eine Anwendung durch Polling regelm\u00e4\u00dfig eine Quelltabelle abfragt. Vielmehr wird es notwendig, dass die Anwendung \u00fcber Change-Events in einer Tabelle benachrichtigt wird und die Informationen sofort aufbereitet zur Verf\u00fcgung gestellt bekommt.<\/p>\n\n\n\n<p>Und genau das ist mit dem Einsatz von Debezium und der Streaming-Plattform Apache Kafka m\u00f6glich.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Daten\u00e4nderungen erkennen<\/h2>\n\n\n\n<p>Zu Beginn sollte einmal kurz gekl\u00e4rt werden, welche grundlegenden M\u00f6glichkeiten es zum Erfassen von Daten\u00e4nderungen in relationalen Datenbanken gibt. In der Fachliteratur finden sich dazu unter dem Begriff <em>Change Data Capture<\/em> vier Methoden, die im folgenden Abschnitt vorgestellt werden.<\/p>\n\n\n\n<p>Die einfachste M\u00f6glichkeit zur Erkennung von \u00c4nderungen ist der zeilen- und spaltenweise Vergleich einer Datenbanktabelle mit einer \u00e4lteren Version von ihr. Es ist offensichtlich, dass dieser Algorithmus gerade f\u00fcr gr\u00f6\u00dfere Tabellen nicht besonders effizient, daf\u00fcr aber leicht zu implementieren ist. Eine weitere Idee ist es, nur die ge\u00e4nderten Datens\u00e4tze anhand einer geschickten SQL-Abfrage auszuw\u00e4hlen. Daf\u00fcr kommen in der Praxis meist Zeitstempel zur Anwendung, die f\u00fcr jeden Datensatz angeben, wann dieser zuletzt ge\u00e4ndert wurde. Sucht man nun nach Daten\u00e4nderungen in der Tabelle, selektiert man alle Datens\u00e4tze, deren Zeitstempel j\u00fcnger sind als der Zeitpunkt des letzten Vergleichs. Ein minimales SQL-Statement k\u00f6nnte so aussehen:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">SELECT * FROM [source_table] \nWHERE last_updated &lt; [datetime_of_last_comparison]<\/pre>\n\n\n\n<p>Problematisch an diesem Ansatz ist, dass eine solche Zeitstempel-Spalte in der Datenbanktabelle schon vorhanden sein muss, was wohl nicht immer der Fall sein wird. Es werden also Anforderungen an das Datenschema gestellt. Weiterhin lassen sich mit dieser Methode gel\u00f6schte Datens\u00e4tze nur sehr schwer erkennen, da ihre Zeitstempel ebenfalls gel\u00f6scht werden.<\/p>\n\n\n\n<p>Eine dritte M\u00f6glichkeit, die dieses Problem l\u00f6sen kann, ist die Implementierung eines Datenbanktriggers, der nach jedem INSERT, UPDATE und DELETE auf der Tabelle ausgel\u00f6st wird. Weiterhin w\u00e4re es auch denkbar, \u00c4nderungen am Datenbankschema mithilfe eines Triggers zu \u00fcberwachen. Ein solcher Trigger k\u00f6nnte dann die erfassten Daten\u00e4nderungen in eine extra daf\u00fcr vorgesehene Tabelle schreiben.<\/p>\n\n\n\n<p>Zu guter Letzt gibt es noch eine vierte Methode, das sogenannte Log-Scanning, welches in diesem Blogpost eine besonders wichtige Rolle spielt. Die meisten Datenbankmanagementsysteme (DBMS) f\u00fchren ein Transaktionslog, das alle \u00c4nderungen, die an der Datenbank vollzogen wurden, aufzeichnet. Dies dient vor allem dazu, die Datenbank nach einem Ausfall, sei es bedingt durch einen Stromausfall oder einen Schaden am physischen Datentr\u00e4ger, wieder zur\u00fcck in einen konsistenten Zustand zu bringen. F\u00fcr das Change Data Capture wird nun das Transaktionslog etwas zweckentfremdet: Durch das Auslesen der Logdatei ist es m\u00f6glich, \u00c4nderungen an den Datens\u00e4tzen einer bestimmten Quelltabelle zu erkennen und diese dann weiter zu verarbeiten.<\/p>\n\n\n\n<p>Der gro\u00dfe Vorteil des Log-Scannings ist es, dass durch das Auslesen des Transaktionslogs kein Overhead auf der Datenbank erzeugt wird, wie es beim Stellen von Abfragen oder beim Ausf\u00fchren eines Triggers nach jeder \u00c4nderung der Fall ist. Damit wird die Performance der Datenbank nicht weiter beeintr\u00e4chtigt. Weiterhin k\u00f6nnen alle Arten von Daten\u00e4nderungen erfasst werden: das Einf\u00fcgen, Aktualisieren und L\u00f6schen von Datens\u00e4tzen und auch das \u00c4ndern des Datenschemas. Problematisch ist aber, dass der Aufbau solcher Transaktionslogs nicht genormt ist. Die Logdateien der einzelnen Datenbankhersteller sehen vollkommen unterschiedlich aus und unterscheiden sich teilweise auch zwischen den einzelnen Versionen ein und desselben Datenbankmanagementsystems. M\u00f6chte man also Daten\u00e4nderungen aus mehreren Datenbanken unterschiedlicher Hersteller erfassen, m\u00fcssen mehrere Algorithmen implementiert werden.<\/p>\n\n\n\n<p>Und genau an dieser Stelle kommt Debezium ins Spiel.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Was ist Debezium?<\/h2>\n\n\n\n<p>Debezium ist an sich keine eigenst\u00e4ndige Software, sondern eine Plattform f\u00fcr Konnektoren, die das Change Data Capture f\u00fcr verschiedene Datenbanken implementieren. Dabei nutzen die Konnektoren das Log-Scanning, um die Daten\u00e4nderungen zu erfassen und sie an die Streaming-Plattform <em>Apache Kafka<\/em> weiterzureichen.<\/p>\n\n\n\n<p>Jeder Konnektor repr\u00e4sentiert eine Software f\u00fcr ein bestimmtes DBMS, welche in der Lage ist, eine Verbindung zur Datenbank aufzubauen und dort die \u00c4nderungsdaten auszulesen. Die genaue Funktionsweise eines Konnektors unterscheidet sich zwischen den DBMS, im Allgemeinen wird aber zun\u00e4chst ein Snapshot vom bestehenden Datenbestand erzeugt und danach auf \u00c4nderungen im Transaktionslog gewartet. Bisher hat Debezium Konnektoren f\u00fcr die Datenbanken MongoDB, MySQL, PostgreSQL und SQL Server entwickelt. Weitere f\u00fcr Oracle, Db2 und Cassandra befinden sich aktuell noch in der Entwicklungsphase, sind aber schon verf\u00fcgbar.<\/p>\n\n\n\n<p>Die g\u00e4ngigste Variante, Debezium einzusetzen, ist in Kombination mit Apache Kafka und dem dazugeh\u00f6rigen Framework Kafka Connect. Apache Kafka ist eine quelloffene, verteilte Streaming-Plattform, die auf dem Publisher-Subscriber-Modell basiert. Es bietet Applikationen die M\u00f6glichkeit, Datenstr\u00f6me in Echtzeit zu verarbeiten und Nachrichten zwischen mehreren Prozessen auszutauschen. Mit Kafka Connect lassen sich passend dazu Konnektoren implementieren, die sowohl Daten nach Kafka schreiben (Quell-Konnektoren) als auch aus Kafka lesen k\u00f6nnen (Sink-Konnektoren). Debezium stellt, wie man schon vermutet, solche Quell-Konnektoren zur Verf\u00fcgung, die die ermittelten Change-Events an Kafka streamen. Applikationen, die nun an den \u00c4nderungsdaten interessiert sind, k\u00f6nnen diese aus den Logs von Apache Kafka lesen und verarbeiten.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2021\/02\/202101_Datenbankaenderungen_Teil_1-1024x347.png\" alt=\"Architektur-Skizze f\u00fcr den Einsatz von Debezium\" class=\"wp-image-2070\" width=\"768\" height=\"260\" srcset=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2021\/02\/202101_Datenbankaenderungen_Teil_1-1024x347.png 1024w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2021\/02\/202101_Datenbankaenderungen_Teil_1-600x203.png 600w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2021\/02\/202101_Datenbankaenderungen_Teil_1-768x260.png 768w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2021\/02\/202101_Datenbankaenderungen_Teil_1-1536x520.png 1536w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2021\/02\/202101_Datenbankaenderungen_Teil_1-640x217.png 640w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2021\/02\/202101_Datenbankaenderungen_Teil_1-1200x406.png 1200w, https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2021\/02\/202101_Datenbankaenderungen_Teil_1.png 1900w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 768px\" \/><figcaption><em>Abbildung: Architektur-Skizze f\u00fcr den Einsatz von Debezium<sup> 1<\/sup><\/em><\/figcaption><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Seit kurzem gibt es auch die M\u00f6glichkeit, Debezium nicht mehr in Verbindung mit Kafka Connect, sondern auch als Standalone-Applikation zu verwenden. Damit sind Anwender nicht mehr an Kafka gebunden und k\u00f6nnen Change-Events auch an weitere Streaming-Plattformen, wie z. B. Kinesis, Google Cloud Pub\/Sub oder Azure Event Hubs weiterreichen. Die \u00c4nderungsdaten, die Debezium aus unterschiedlichen Datenbanken ermittelt, m\u00fcssen f\u00fcr Applikationen, die diese weiterverarbeiten wollen (Consumer), in einem einheitlichen Format zur Verf\u00fcgung gestellt werden. Das realisiert Debezium \u00fcber das JSON-Format. Ein Change-Event hat dabei immer zwei Teile: einen Payload-Teil und ein vorangehendes Schema, das den Aufbau des Payloads beschreibt. Im Payload-Teil befinden sich u. a. die Operation, die auf dem Datensatz ausgef\u00fchrt wurde bzw. auch die Inhalte der Zeile vor und nach der \u00c4nderung. Besonders gekennzeichnet wird auch der Prim\u00e4rschl\u00fcssel des Datensatzes, was wichtig f\u00fcr die Zuordnung des Events zu einer Partition in Kafka ist. Doch dazu mehr im zweiten Teil.<\/p>\n\n\n\n<p>Weiterhin legt Debezium beim Change Data Capture einen gro\u00dfen Wert auf Fehlertoleranz: Sollte mal ein Konnektor abst\u00fcrzen, wird nach seinem Neustart an der letzten verarbeiteten Position im Transaktionslog weitergelesen. Auch bei einer fehlenden Verbindung zu Apache Kafka werden die \u00c4nderungsdaten so lange zwischengespeichert, bis wieder eine Verbindung hergestellt werden konnte. Damit w\u00e4ren zun\u00e4chst einmal die Grundlagen f\u00fcr die Nutzung von Debezium gekl\u00e4rt. Im n\u00e4chsten Teil des Blogposts wird ein konkretes Beispiel vorgestellt, bei dem Debezium Change-Events aus einer Beispieltabelle im SQL Server streamt.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p><sup>1<\/sup> Die Skizze ist in ihrer Art an die Architektur-Skizze in der Dokumentation von Debezium angelehnt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dieser Beitrag zeigt, wie relationale Datenbanken mit Debezium und der Streaming-Plattform Apache Kafka besser verwaltet werden k\u00f6nnen.<\/p>\n","protected":false},"author":107,"featured_media":2071,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","footnotes":""},"categories":[15,16],"tags":[337,542,543,544,545,546,547,548,549,550,551],"topics":[552],"class_list":["post-1986","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","category-dot-net","tag-editorschoice","tag-datenbanken","tag-relationale-datenbanken","tag-debezium","tag-streaming-plattform","tag-apache-kafka","tag-kafka","tag-change-events","tag-datenaenderungen","tag-datenbankaenderungen","tag-change-data-capture","topics-datenbankaenderungen-mit-debezium-und-apache-kafka"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Datenbank\u00e4nderungen erkennen und ... - ZEISS Digital Innovation Blog<\/title>\n<meta name=\"description\" content=\"Dieser Beitrag zeigt, wie relationale Datenbanken mit Debezium und der Streaming-Plattform Apache Kafka besser verwaltet werden k\u00f6nnen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Datenbank\u00e4nderungen erkennen und ... - ZEISS Digital Innovation Blog\" \/>\n<meta property=\"og:description\" content=\"Dieser Beitrag zeigt, wie relationale Datenbanken mit Debezium und der Streaming-Plattform Apache Kafka besser verwaltet werden k\u00f6nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Digital Innovation Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ZEISSDigitalInnovation\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-03T09:05:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-05-19T06:20:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2021\/02\/202101_Datenbankaenderungen_Teil_1_fi.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1125\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Richard Mogwitz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ZEISS_di\" \/>\n<meta name=\"twitter:site\" content=\"@ZEISS_di\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Richard Mogwitz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/\",\"name\":\"Datenbank\u00e4nderungen erkennen und ... - ZEISS Digital Innovation Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2021\/02\/202101_Datenbankaenderungen_Teil_1_fi.png\",\"datePublished\":\"2021-02-03T09:05:42+00:00\",\"dateModified\":\"2021-05-19T06:20:17+00:00\",\"author\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/3465908d8147bde7af2b97ae3f00354e\"},\"description\":\"Dieser Beitrag zeigt, wie relationale Datenbanken mit Debezium und der Streaming-Plattform Apache Kafka besser verwaltet werden k\u00f6nnen.\",\"breadcrumb\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/#primaryimage\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2021\/02\/202101_Datenbankaenderungen_Teil_1_fi.png\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2021\/02\/202101_Datenbankaenderungen_Teil_1_fi.png\",\"width\":2000,\"height\":1125,\"caption\":\"Architektur-Skizze f\u00fcr den Einsatz von Debezium\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Datenbank\u00e4nderungen erkennen und streamen mit Debezium und Apache Kafka (Teil 1) \u2013 Die Theorie\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#website\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/\",\"name\":\"Digital Innovation Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/3465908d8147bde7af2b97ae3f00354e\",\"name\":\"Richard Mogwitz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/12\/mogwitz_richard-e1608623929823-150x150.jpg\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/12\/mogwitz_richard-e1608623929823-150x150.jpg\",\"caption\":\"Richard Mogwitz\"},\"description\":\"Richard Mogwitz studiert Angewandte Informatik an der HTW Dresden und ist seit 2019 bei der ZEISS Digital Innovation als Werkstudent t\u00e4tig. Dabei besch\u00e4ftigt er sich haupts\u00e4chlich mit der Entwicklung von .NET-Anwendungen, aber auch mit der Programmierung von Web-Applikationen mit Blazor und Angular.\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/author\/richardmogwitz\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Datenbank\u00e4nderungen erkennen und ... - ZEISS Digital Innovation Blog","description":"Dieser Beitrag zeigt, wie relationale Datenbanken mit Debezium und der Streaming-Plattform Apache Kafka besser verwaltet werden k\u00f6nnen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/","og_locale":"de_DE","og_type":"article","og_title":"Datenbank\u00e4nderungen erkennen und ... - ZEISS Digital Innovation Blog","og_description":"Dieser Beitrag zeigt, wie relationale Datenbanken mit Debezium und der Streaming-Plattform Apache Kafka besser verwaltet werden k\u00f6nnen.","og_url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/","og_site_name":"Digital Innovation Blog","article_publisher":"https:\/\/www.facebook.com\/ZEISSDigitalInnovation\/","article_published_time":"2021-02-03T09:05:42+00:00","article_modified_time":"2021-05-19T06:20:17+00:00","og_image":[{"width":2000,"height":1125,"url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2021\/02\/202101_Datenbankaenderungen_Teil_1_fi.png","type":"image\/png"}],"author":"Richard Mogwitz","twitter_card":"summary_large_image","twitter_creator":"@ZEISS_di","twitter_site":"@ZEISS_di","twitter_misc":{"Verfasst von":"Richard Mogwitz","Gesch\u00e4tzte Lesezeit":"6\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/","name":"Datenbank\u00e4nderungen erkennen und ... - ZEISS Digital Innovation Blog","isPartOf":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/#primaryimage"},"image":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2021\/02\/202101_Datenbankaenderungen_Teil_1_fi.png","datePublished":"2021-02-03T09:05:42+00:00","dateModified":"2021-05-19T06:20:17+00:00","author":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/3465908d8147bde7af2b97ae3f00354e"},"description":"Dieser Beitrag zeigt, wie relationale Datenbanken mit Debezium und der Streaming-Plattform Apache Kafka besser verwaltet werden k\u00f6nnen.","breadcrumb":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/#primaryimage","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2021\/02\/202101_Datenbankaenderungen_Teil_1_fi.png","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2021\/02\/202101_Datenbankaenderungen_Teil_1_fi.png","width":2000,"height":1125,"caption":"Architektur-Skizze f\u00fcr den Einsatz von Debezium"},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/datenbankaenderungen-teil-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/"},{"@type":"ListItem","position":2,"name":"Datenbank\u00e4nderungen erkennen und streamen mit Debezium und Apache Kafka (Teil 1) \u2013 Die Theorie"}]},{"@type":"WebSite","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#website","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/","name":"Digital Innovation Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/3465908d8147bde7af2b97ae3f00354e","name":"Richard Mogwitz","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/#\/schema\/person\/image\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/12\/mogwitz_richard-e1608623929823-150x150.jpg","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/12\/mogwitz_richard-e1608623929823-150x150.jpg","caption":"Richard Mogwitz"},"description":"Richard Mogwitz studiert Angewandte Informatik an der HTW Dresden und ist seit 2019 bei der ZEISS Digital Innovation als Werkstudent t\u00e4tig. Dabei besch\u00e4ftigt er sich haupts\u00e4chlich mit der Entwicklung von .NET-Anwendungen, aber auch mit der Programmierung von Web-Applikationen mit Blazor und Angular.","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/author\/richardmogwitz\/"}]}},"author_meta":{"display_name":"Richard Mogwitz","author_link":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/author\/richardmogwitz\/"},"featured_img":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2021\/02\/202101_Datenbankaenderungen_Teil_1_fi-600x338.png","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/java\/\" class=\"advgb-post-tax-term\">Java<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">.NET<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Java<\/span>","<span class=\"advgb-post-tax-term\">.NET<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">Editor&#039;s Choice<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">Datenbanken<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">relationale Datenbanken<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">Debezium<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">Streaming-Plattform<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">Apache Kafka<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">Kafka<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">Change-Events<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">Daten\u00e4nderungen<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">Datenbank\u00e4nderungen<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/category\/dot-net\/\" class=\"advgb-post-tax-term\">Change Data Capture<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Editor&#039;s Choice<\/span>","<span class=\"advgb-post-tax-term\">Datenbanken<\/span>","<span class=\"advgb-post-tax-term\">relationale Datenbanken<\/span>","<span class=\"advgb-post-tax-term\">Debezium<\/span>","<span class=\"advgb-post-tax-term\">Streaming-Plattform<\/span>","<span class=\"advgb-post-tax-term\">Apache Kafka<\/span>","<span class=\"advgb-post-tax-term\">Kafka<\/span>","<span class=\"advgb-post-tax-term\">Change-Events<\/span>","<span class=\"advgb-post-tax-term\">Daten\u00e4nderungen<\/span>","<span class=\"advgb-post-tax-term\">Datenbank\u00e4nderungen<\/span>","<span class=\"advgb-post-tax-term\">Change Data Capture<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Posted 5\u00a0Jahren ago","modified":"Updated 5\u00a0Jahren ago"},"absolute_dates":{"created":"Posted on Februar 3, 2021","modified":"Updated on Mai 19, 2021"},"absolute_dates_time":{"created":"Posted on Februar 3, 2021 9:05 a.m.","modified":"Updated on Mai 19, 2021 6:20 a.m."},"featured_img_caption":"","series_order":"","_links":{"self":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/posts\/1986","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/users\/107"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/comments?post=1986"}],"version-history":[{"count":7,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/posts\/1986\/revisions"}],"predecessor-version":[{"id":2111,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/posts\/1986\/revisions\/2111"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/media\/2071"}],"wp:attachment":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/media?parent=1986"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/categories?post=1986"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/tags?post=1986"},{"taxonomy":"topics","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-json\/wp\/v2\/topics?post=1986"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}