[{"data":1,"prerenderedAt":170},["ShallowReactive",2],{"case-study-de-live-product-data-pipeline":3,"case-study-related-de-live-product-data-pipeline":147},{"id":4,"title":5,"card":6,"diagrams":12,"extension":24,"eyebrow":25,"facts":26,"intro":36,"layout":37,"locale":53,"meta":54,"order":48,"results":55,"slug":64,"stem":65,"storySections":66,"techGroups":73,"__hash__":146},"caseStudies\u002Fcase-studies\u002Fde\u002Flive-product-data-pipeline.json","AWS-Architektur für eine Live-Produktdaten-Pipeline, vom nächtlichen Batch zu Kafka Streams",{"title":7,"badges":8,"thumb":11},"Live-Produktdaten-Pipeline",[9,10],"Kafka Streams","Amazon MSK","\u002Fcase-studies\u002Flive-product-data-pipeline\u002Fafter.webp",[13,17,20],{"src":14,"alt":15,"caption":16},"\u002Fcase-studies\u002Flive-product-data-pipeline\u002Fbefore.webp","Vorher: ein nächtlicher Batch, durchgängig orchestriert","Die alte Architektur, die ich auch betreut habe.",{"src":11,"alt":18,"caption":19},"Nachher: Kafka Streams auf Amazon MSK, Verarbeitung live","Die neue Architektur, im Team gebaut.",{"src":21,"alt":22,"caption":23},"\u002Fcase-studies\u002Flive-product-data-pipeline\u002Fcore-stack.webp","Kern-Stack","","json","Case Study",[27,30,33],{"label":28,"value":29},"Branche","E-Commerce",{"label":31,"value":32},"Meine Rolle","Betrieb der Batch-Pipeline, Aufbau des Streaming-Nachfolgers im Team",{"label":34,"value":35},"Größenordnung","Millionen Produkte, laufend verarbeitet","Millionen Produkte und eine Datenpipeline, die sie einmal pro Nacht verarbeitet hat, wenn sie nicht fehlschlug.",[38,40,42,45,47,49,51],{"type":39},"header",{"type":41},"results",{"type":43,"index":44},"section",0,{"type":46,"index":44},"diagram",{"type":46,"index":48},1,{"type":50},"technology",{"type":46,"index":52},2,"de",{},[56,60],{"tag":57,"title":58,"body":59},"Zuverlässigkeit","Ein stabiler Job, der zuverlässig läuft","Keine fehlgeschlagenen Nachtläufe und keine manuellen Replays mehr. Die Streaming-Pipeline verarbeitet jede Änderung für sich, in privaten Subnetzen mit eng gefassten Security Groups.",{"tag":61,"title":62,"body":63},"Umsatz","Mehr Umsatz durch frischere Daten","Entscheidungen beruhen auf aktuellen statt auf gestrigen Daten, die Ergebnisse werden besser und erreichen Kunden früher.","live-product-data-pipeline","case-studies\u002Fde\u002Flive-product-data-pipeline",[67],{"heading":68,"paragraphs":69},"Die Geschichte",[70,71,72],"Jedes Produkt im Katalog muss nach Geschäftsregeln verarbeitet und veröffentlicht werden. Bei Millionen Produkten lief das als nächtlicher Batch-Job. Step Functions orchestrierten SNS, Lambdas, ECS-Jobs, EC2 und DynamoDB, geschrieben in Python und TypeScript und mit Terraform bereitgestellt.","Ich habe diese Pipeline betreut, und sie fiel oft aus. Sie war eine lange Kette von Schritten in einem festen Zeitfenster, ein kaputter Schritt ließ die Daten also bis zur nächsten Nacht veralten.","Im Team habe ich sie als Kafka-Streams-Anwendung auf Amazon MSK neu gebaut, betrieben auf ECS in privaten Subnetzen. Änderungen laufen jetzt durch Kafka und werden verarbeitet, sobald sie auftreten, statt einmal pro Nacht.",[74,97,110],{"title":75,"items":76},"Sprachen und Tooling",[77,81,85,89,93],{"name":78,"role":79,"icon":80},"Python","Datenverarbeitung","\u002Ficons\u002Ftech\u002Fpython.svg",{"name":82,"role":83,"icon":84},"TypeScript","Services und Tooling","\u002Ficons\u002Ftech\u002Ftypescript.svg",{"name":86,"role":87,"icon":88},"Vue","interne Tools","\u002Ficons\u002Ftech\u002Fvuejs.svg",{"name":90,"role":91,"icon":92},"Docker","Container","\u002Ficons\u002Ftech\u002Fdocker.svg",{"name":94,"role":95,"icon":96},"Terraform","Infrastructure as Code","\u002Ficons\u002Ftech\u002Fterraform.svg",{"title":98,"items":99},"Streaming",[100,103,106],{"name":9,"role":101,"icon":102},"Live-Verarbeitungsanwendung","\u002Ficons\u002Ftech\u002Fapachekafka.svg",{"name":10,"role":104,"icon":105},"verwaltetes Kafka-Cluster","\u002Ficons\u002Faws\u002FAmazon-Managed-Streaming-for-Apache-Kafka.svg",{"name":107,"role":108,"icon":109},"Amazon ECS","betreibt die Streams-Anwendung","\u002Ficons\u002Faws\u002FAmazon-Elastic-Container-Service.svg",{"title":111,"items":112},"Batch-Pipeline und Plattform",[113,117,123,128,134,140],{"name":114,"role":115,"icon":116},"AWS Step Functions","nächtliche Orchestrierung","\u002Ficons\u002Faws\u002FAWS-Step-Functions.svg",{"name":118,"role":119,"icon":120,"icons":121},"AWS Lambda, Amazon SNS","Aufnahme externer Daten","\u002Ficons\u002Faws\u002FAWS-Lambda.svg",[120,122],"\u002Ficons\u002Faws\u002FAmazon-SNS.svg",{"name":124,"role":125,"icon":126,"icons":127},"Amazon EC2, ECS","Verarbeitungs-Workflow","\u002Ficons\u002Faws\u002FAmazon-EC2.svg",[126,109],{"name":129,"role":130,"icon":131,"icons":132},"Amazon DynamoDB, RDS","interne Produktdaten","\u002Ficons\u002Faws\u002FAmazon-DynamoDB.svg",[131,133],"\u002Ficons\u002Faws\u002FAmazon-RDS.svg",{"name":135,"role":136,"icon":137,"icons":138},"Amazon VPC, IAM","Netzwerk, Security Groups, Zugriff","\u002Ficons\u002Faws\u002FAmazon-VPC.svg",[137,139],"\u002Ficons\u002Faws\u002FAWS-IAM.svg",{"name":141,"role":142,"icon":143,"icons":144},"Amazon CloudWatch, Grafana","Metriken und Fehlerberichte","\u002Ficons\u002Faws\u002FAmazon-CloudWatch.svg",[143,145],"\u002Ficons\u002Ftech\u002Fgrafana.svg","pf088f0YtYJ8kMZztXWAd0jOWViqEvNn_hPpYfXUQbM",[148,156,163],{"slug":149,"card":150},"product-classification",{"title":151,"badges":152,"thumb":155},"Produktklassifizierung mit MLOps",[153,154],"Amazon Bedrock","PyTorch","\u002Fcase-studies\u002Fproduct-classification\u002Ftraining-pipeline.webp",{"slug":157,"card":158},"property-management-platform",{"title":159,"badges":160,"thumb":162},"Mandantenfähige Hausverwaltungs-Plattform",[161,153],"Mandantenfähigkeit","\u002Fcase-studies\u002Fproperty-management-platform\u002Fsystem-architecture.webp",{"slug":164,"card":165},"ale-business-bookkeeping",{"title":166,"badges":167,"thumb":169},"Buchhaltung per Chat",[168,153],"LLM-Harness","\u002Fcase-studies\u002Fale-business-bookkeeping\u002Fsystem-architecture.webp",1790607906444]