{"id":6391,"date":"2025-12-23T19:48:32","date_gmt":"2025-12-23T19:48:32","guid":{"rendered":"https:\/\/bentego.com\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/"},"modified":"2026-02-26T19:53:03","modified_gmt":"2026-02-26T19:53:03","slug":"acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study","status":"publish","type":"post","link":"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/","title":{"rendered":"A\u00e7\u0131k Kaynakl\u0131 Ara\u00e7larla LakeHouse: Apache Iceberg Case Study"},"content":{"rendered":"\n<p id=\"a496\">G\u00fcn\u00fcm\u00fcz veri platformlar\u0131nda g\u00fcncel ihtiya\u00e7lardan biri, veriyi g\u00fcvenilir \u015fekilde saklamak, ger\u00e7ek zamanl\u0131 de\u011fi\u015fiklikleri i\u015flemek ve analitik i\u00e7in tutarl\u0131 tablolar sunmak. Bu noktada a\u00e7\u0131k kaynak \u00e7\u00f6z\u00fcmler b\u00fct\u00e7e a\u00e7\u0131s\u0131ndan sundu\u011fu rahatl\u0131k ile g\u00fcndeme geliyor. Bu yaz\u0131da MinIO, Apache Iceberg, Spark, Debezium, Kafka, Airflow ve Trino gibi a\u00e7\u0131k kaynakl\u0131 ara\u00e7lar\u0131 bir araya getirerek u\u00e7tan uca bir veri g\u00f6l\u00fc senaryosu kurgulayaca\u011f\u0131m.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"2dad\">Neden Bu \u00dcr\u00fcnler?<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>MinIO<\/strong>: A\u00e7\u0131k kaynakl\u0131 S3 uyumlu nesne depolama, kolay kurulum ve \u00f6l\u00e7eklenebilirlik.<\/li>\n\n\n\n<li><strong>Apache Iceberg<\/strong>: A\u00e7\u0131k tablo format\u0131, schema evolution, snapshot &amp; time-travel deste\u011fi.<\/li>\n\n\n\n<li><strong>Apache Spark<\/strong>: B\u00fcy\u00fck veri i\u015fleme, batch ve streaming i\u00e7in esneklik.<\/li>\n\n\n\n<li><strong>Apache Kafka<\/strong>: Ger\u00e7ek zamanl\u0131 veri ta\u015f\u0131ma i\u00e7in end\u00fcstri standard\u0131.<\/li>\n\n\n\n<li><strong>Debezium<\/strong>: Veritabanlar\u0131ndaki de\u011fi\u015fiklikleri yakalayan CDC (Change Data Capture) \u00e7\u00f6z\u00fcm\u00fc.<\/li>\n\n\n\n<li><strong>Apache Airflow<\/strong>: ETL orkestrasyonu, DAG tabanl\u0131 ak\u0131\u015f y\u00f6netimi.<\/li>\n\n\n\n<li><strong>Trino<\/strong>: Da\u011f\u0131t\u0131k SQL motoru, Iceberg \u00fczerinde h\u0131zl\u0131 sorgulama.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"cb0c\">Neden Iceberg?<\/h2>\n\n\n\n<p id=\"5bdd\">Iceberg, klasik Hive tabanl\u0131 tablolara g\u00f6re bir\u00e7ok avantaj sa\u011flar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ACID (Atomicity, Consistency, Isolation, Durability):\u00a0<\/strong>Iceberg, transaction tabanl\u0131 yap\u0131s\u0131 sayesinde g\u00fcvenli okuma\/yazma i\u015flemleri sunar. Ayn\u0131 anda birden fazla i\u015flemin veri tutarl\u0131l\u0131\u011f\u0131n\u0131 bozmadan \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar ve partial write problemlerini ortadan kald\u0131r\u0131r.<\/li>\n\n\n\n<li><strong>Schema Evolution<\/strong>: Tablo yap\u0131s\u0131 de\u011fi\u015fse bile veri kayb\u0131 olmadan devam edilebilir.<\/li>\n\n\n\n<li><strong>Time Travel<\/strong>: Eski snapshot\u2019lara geri d\u00f6n\u00fcp sorgulama yap\u0131labilir.<\/li>\n\n\n\n<li><strong>Partition Evolution<\/strong>: Partition stratejisi de\u011fi\u015ftirilebilir.<\/li>\n\n\n\n<li><strong>Performans<\/strong>: Metadata layer sayesinde milyonlarca dosya bile h\u0131zl\u0131 y\u00f6netilir.<\/li>\n<\/ul>\n\n\n\n<p id=\"94d3\">K\u0131sacas\u0131&nbsp;<strong>uzun vadeli, g\u00fcvenilir ve analitik odakl\u0131 bir veri g\u00f6l\u00fc<\/strong>&nbsp;i\u00e7in Iceberg en mant\u0131kl\u0131 tercihlerden biridir.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"c375\">Senaryolar<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"1ca4\">Senaryo A \u2014 Spark Structured Streaming<\/h2>\n\n\n\n<p id=\"9ef2\"><strong>MSSQL \u2192 Debezium \u2192 Kafka \u2192 Spark Structured Streaming \u2192 Iceberg<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"0e56\">Debezium Kurulumu ve Kafka Entegrasyonu<\/h2>\n\n\n\n<p id=\"9a4d\">Debezium, veritaban\u0131ndaki de\u011fi\u015fiklikleri Kafka\u2019ya CDC event\u2019leri olarak aktar\u0131r.<\/p>\n\n\n\n<p id=\"f553\"><strong>Connector config \u00f6rne\u011fi (MSSQL i\u00e7in):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br>\"name\": \"mssql-connector\",<br>\"config\": {<br>\"connector.class\": \"io.debezium.connector.sqlserver.SqlServerConnector\",<br>\"database.hostname\": \"mssql_host\",<br>\"database.port\": \"1433\",<br>\"database.user\": \"user\",<br>\"database.password\": \"pass\",<br>\"database.dbname\": \"mydb\",<br>\"database.server.name\": \"mssql_server\",<br>\"table.include.list\": \"dbo.customers\",<br>\"database.history.kafka.bootstrap.servers\": \"kafka:9092\",<br>\"database.history.kafka.topic\": \"schema-changes.mssql\"<br>}<br>}<\/pre>\n\n\n\n<p id=\"beca\">Kafka\u2019ya d\u00fc\u015fen veriler genelde \u015fu formatta olur:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br>\"before\": {\"id\": 1, \"name\": \"Ali\"},<br>\"after\": {\"id\": 1, \"name\": \"Ali Veli\"},<br>\"op\": \"u\",<br>\"ts_ms\": 1690000000000<br>}<\/pre>\n\n\n\n<p id=\"91a8\">op: i\u015flem tipi (c=create, u=update, d=delete).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"6f80\">Spark Structured Streaming \u0130\u015flemi<\/h2>\n\n\n\n<p id=\"ae7c\">Structured Streaming job\u2019u, Kafka topic\u2019ini okuyup Iceberg tablosuna yazar.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">from pyspark.sql import SparkSession<br>from pyspark.sql.functions import from_json, col<br>from pyspark.sql.types import StructType, StructField, StringType, IntegerType<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">spark = (SparkSession.builder<br>    .appName(\"cdc-to-iceberg\")<br>    .config(\"spark.sql.catalog.my_catalog\", \"org.apache.iceberg.spark.SparkCatalog\")<br>    .config(\"spark.sql.catalog.my_catalog.type\", \"hadoop\")<br>    .config(\"spark.sql.catalog.my_catalog.warehouse\", \"s3a:\/\/warehouse\/iceberg\")<br>    .getOrCreate())schema = StructType([<br>    StructField(\"before\", StringType()),<br>    StructField(\"after\", StringType()),<br>    StructField(\"op\", StringType()),<br>    StructField(\"ts_ms\", StringType())<br>])kafka_df = (spark.readStream<br>    .format(\"kafka\")<br>    .option(\"kafka.bootstrap.servers\", \"kafka:9092\")<br>    .option(\"subscribe\", \"mssql_server.dbo.customers\")<br>    .load())parsed_df = kafka_df.selectExpr(\"CAST(value AS STRING) as json\") \\<br>    .select(from_json(col(\"json\"), schema).alias(\"data\"))# \u00d6rne\u011fin sadece insert\/update olan kay\u0131tlar\u0131 after\u2019dan al\u0131p yaz\u0131yoruz<br>final_df = parsed_df.select(\"data.after.*\")(final_df.writeStream<br>    .format(\"iceberg\")<br>    .option(\"checkpointLocation\", \"s3a:\/\/chkpt\/customers\/\")<br>    .toTable(\"my_catalog.db.customers\"))<\/pre>\n\n\n\n<p id=\"eae6\">Bu job s\u00fcrekli \u00e7al\u0131\u015farak&nbsp;<strong>ger\u00e7ek zamanl\u0131 g\u00fcncellenmi\u015f bir Iceberg tablosu<\/strong>&nbsp;sa\u011flar.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"b341\">Senaryo B \u2014 Kafka + Airflow + Spark Batch<\/h2>\n\n\n\n<p id=\"8c56\"><strong>MSSQL \u2192 Debezium \u2192 Kafka \u2192 Airflow DAG \u2192 Spark Batch \u2192 Iceberg<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"88ee\">Airflow DAG (Kafka \u2192 Spark Batch)<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">from airflow import DAG<br>from airflow.providers.apache.spark.operators.spark_submit import SparkSubmitOperator<br>from airflow.utils.dates import days_ago<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">default_args = {\"owner\": \"airflow\", \"start_date\": days_ago(1)}dag = DAG(<br>    dag_id=\"kafka_to_iceberg_batch\",<br>    default_args=default_args,<br>    schedule_interval=\"@hourly\",<br>    catchup=False<br>)<br>spark_job = SparkSubmitOperator(<br>    task_id=\"spark_batch_load\",<br>    application=\"\/opt\/spark_jobs\/kafka_batch_to_iceberg.py\",<br>    conn_id=\"spark_default\",<br>    dag=dag<br>)<\/pre>\n\n\n\n<p id=\"955e\"><strong>Spark Batch Job (kafka_batch_to_iceberg.py)<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">kafka_df = (spark.read<br>    .format(\"kafka\")<br>    .option(\"kafka.bootstrap.servers\", \"kafka:9092\")<br>    .option(\"subscribe\", \"mssql_server.dbo.customers\")<br>    .load())<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">parsed_df = kafka_df.selectExpr(\"CAST(value AS STRING)\")<br>parsed_df.writeTo(\"my_catalog.db.customers\").append()<\/pre>\n\n\n\n<p id=\"8ba7\">Burada batch olarak Kafka\u2019dan al\u0131nan veri Iceberg\u2019e yaz\u0131l\u0131r. Saatlik, g\u00fcnl\u00fck veya custom aral\u0131klarla \u00e7al\u0131\u015ft\u0131r\u0131labilir.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"9904\">Senaryo C \u2014 Kafka Connect \u2192 Iceberg Sink (Spark\u2019s\u0131z)<\/h2>\n\n\n\n<p id=\"0876\"><strong>MSSQL \u2192 Debezium \u2192 Kafka \u2192 Kafka Connect Iceberg Sink \u2192 Iceberg<\/strong><\/p>\n\n\n\n<p id=\"cbc4\">Avantaj: Spark ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 yok, sade mimari.<br>Kullan\u0131m Alan\u0131: Daha basit kurulumlar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"abe6\">Debezium MSSQL Source Connector (connector-mssql.json)<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br>  \"name\": \"mssql-debezium-connector\",<br>  \"config\": {<br>    \"connector.class\": \"io.debezium.connector.sqlserver.SqlServerConnector\",<br>    \"tasks.max\": \"1\",<br>    \"database.hostname\": \"mssql-host\",<br>    \"database.port\": \"1433\",<br>    \"database.user\": \"sa\",<br>    \"database.password\": \"StrongPassword!\",<br>    \"database.dbname\": \"mydb\",<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">    \"database.server.name\": \"mssql_server1\",<br>    \"table.include.list\": \"dbo.users,dbo.orders\", <br>    \"database.encrypt\": \"false\",<br>    \"snapshot.mode\": \"initial\", <br>    \"database.history.kafka.bootstrap.servers\": \"kafka:9092\",<br>    \"database.history.kafka.topic\": \"schema-changes.mydb\",<br>    \"include.schema.changes\": \"true\",<br>    \"tombstones.on.delete\": \"false\",<br>    \"decimal.handling.mode\": \"string\",<br>    \"time.precision.mode\": \"connect\"<br>  }<br>}<\/pre>\n\n\n\n<p id=\"17a5\">Bu konfig\u00fcrasyon MSSQL\u2019de CDC aktif tablolar\u0131 dinler ve Kafka\u2019da \u015fu formatta topic olu\u015fturur:<\/p>\n\n\n\n<p id=\"3643\"><em>mssql_server1.dbo.users<\/em><\/p>\n\n\n\n<p id=\"6beb\"><em>mssql_server1.dbo.orders<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2286\">Iceberg Sink Connector (connector-iceberg.json)<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">{<br>  \"name\": \"iceberg-sink-connector\",<br>  \"config\": {<br>    \"connector.class\": \"org.apache.iceberg.connect.IcebergSinkConnector\",<br>    \"tasks.max\": \"1\",<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">    \"topics\": \"mssql_server1.dbo.users\",<br>    \"iceberg.catalog.type\": \"hadoop\",<br>    \"iceberg.catalog.warehouse\": \"s3a:\/\/datalake\/warehouse\",<br>    \"iceberg.catalog.hadoop.fs.s3a.endpoint\": \"http:\/\/minio:9000\",<br>    \"iceberg.catalog.hadoop.fs.s3a.access.key\": \"minioadmin\",<br>    \"iceberg.catalog.hadoop.fs.s3a.secret.key\": \"minioadmin\",<br>    \"iceberg.catalog.hadoop.fs.s3a.path.style.access\": \"true\",<br>    \"iceberg.catalog.name\": \"hive_prod\",<br>    \"iceberg.table.auto-create\": \"true\",  <br>    \"iceberg.table.namespace\": \"db1\",     <br>    \"iceberg.table.name\": \"users\",       <br>    \"key.converter\": \"org.apache.kafka.connect.json.JsonConverter\",<br>    \"value.converter\": \"org.apache.kafka.connect.json.JsonConverter\",<br>    \"value.converter.schemas.enable\": \"true\"<br>  }<br>}<\/pre>\n\n\n\n<p id=\"1136\">Bu ayarlarda:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kafka\u2019daki\u00a0<strong>mssql_server1.dbo.users<\/strong>\u00a0topic\u2019inden gelen event\u2019ler\u00a0<strong>MinIO \u00fczerindeki Iceberg tablosuna (hive_prod.db1.users)<\/strong>\u00a0yaz\u0131l\u0131r.<\/li>\n\n\n\n<li>auto-create parametresi tablonun Iceberg taraf\u0131nda yoksa otomatik olu\u015fturulmas\u0131n\u0131 sa\u011flar.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"9c1c\">Senaryo D \u2014 Kafka Sensor DAG<\/h2>\n\n\n\n<p id=\"c252\">Airflow, Kafka topic\u2019ini dinleyerek yeni veri geldi\u011finde Spark job tetikleyebilir.<\/p>\n\n\n\n<p id=\"4675\"><strong>\u00d6rnek DAG<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">from airflow import DAG<br>from airflow.providers.apache.kafka.sensors.kafka import KafkaSensor<br>from airflow.providers.apache.spark.operators.spark_submit import SparkSubmitOperator<br>from airflow.utils.dates import days_ago<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">default_args = {\"owner\": \"airflow\", \"start_date\": days_ago(1)}dag = DAG(\"kafka_sensor_to_spark\", default_args=default_args, schedule_interval=None)wait_for_kafka = KafkaSensor(<br>    task_id=\"wait_for_kafka_msg\",<br>    topic=\"mssql_server.dbo.customers\",<br>    kafka_conn_id=\"kafka_default\",<br>    dag=dag<br>)<br>spark_task = SparkSubmitOperator(<br>    task_id=\"spark_job\",<br>    application=\"\/opt\/spark_jobs\/kafka_to_iceberg.py\",<br>    conn_id=\"spark_default\",<br>    dag=dag<br>)wait_for_kafka &gt;&gt; spark_task<\/pre>\n\n\n\n<p id=\"56d8\">Burada Spark job\u2019u ancak Kafka\u2019ya veri d\u00fc\u015ft\u00fc\u011f\u00fcnde \u00e7al\u0131\u015f\u0131r.<\/p>\n\n\n\n<p id=\"5e35\"><strong>MSSQL Taraf\u0131nda CDC Ayarlar\u0131<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ALTER DATABASE TestDB SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);<br>ALTER TABLE dbo.Customers ENABLE CHANGE_TRACKING;<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"0910\">Iceberg Partitioning Stratejisi<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">CREATE TABLE my_catalog.db.customers (<br>  id BIGINT,<br>  name STRING,<br>  country STRING,<br>  updated_at TIMESTAMP<br>) USING iceberg<br>PARTITIONED BY (days(updated_at));<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"0c64\">Trino ile Sorgulama<\/h2>\n\n\n\n<p id=\"219a\"><em>etc\/catalog\/iceberg.properties:<\/em><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">connector.name=iceberg<br>warehouse=s3a:\/\/datalake\/warehouse<\/pre>\n\n\n\n<p id=\"0018\">Sorgu \u00f6rne\u011fi:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">SELECT country, COUNT(*) FROM iceberg.db.customers<br>WHERE updated_at &gt;= DATE '2025\u201301\u201301' GROUP BY country;<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"2ad3\">Incremental ve Full SQL Load \u00d6rnekleri<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"b7c2\">Full Load (Overwrite)<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">df = spark.read.format(\"jdbc\").option(\"url\", jdbc_url).option(\"dbtable\", \"dbo.customers\").load()<br>df.writeTo(\"my_catalog.db.customers\").overwritePartitions()<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"89e9\">Incremental Load (Append)<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">new_df = spark.read.format(\"jdbc\").option(\"url\", jdbc_url).option(\"dbtable\", \"dbo.customers_delta\").load()<br>new_df.writeTo(\"my_catalog.db.customers\").append()<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"60b9\">SQL API ile<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">INSERT INTO my_catalog.db.customers SELECT * FROM temp_view;<\/pre>\n\n\n\n<p id=\"ed18\">\u00d6zetle, bu yaz\u0131da MSSQL \u2192 Iceberg entegrasyonunu birden fazla y\u00f6ntem \u00fczerinden ele alarak farkl\u0131 mimari tercihlere g\u00f6re uygulanabilecek temel yakla\u015f\u0131mlara yer verdim.<\/p>\n\n\n\n<p id=\"a8b8\">Buradaki de\u011ferlendirmelerin, kurumsal veri platformlar\u0131n\u0131 modernle\u015ftirmek ve analitik ihtiya\u00e7lar i\u00e7in daha esnek bir altyap\u0131 olu\u015fturmak isteyen ekipler i\u00e7in yol g\u00f6sterici olaca\u011f\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcyorum.<a href=\"https:\/\/medium.com\/tag\/data-lakehouse?source=post_page-----32aae234edef---------------------------------------\"><\/a><\/p>\n\n\n\n<p id=\"a496\"><a href=\"https:\/\/medium.com\/tag\/spark?source=post_page-----32aae234edef---------------------------------------\"><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>G\u00fcn\u00fcm\u00fcz veri platformlar\u0131nda g\u00fcncel ihtiya\u00e7lardan biri, veriyi g\u00fcvenilir \u015fekilde saklamak, ger\u00e7ek zamanl\u0131 de\u011fi\u015fiklikleri i\u015flemek ve analitik i\u00e7in tutarl\u0131 tablolar sunmak. Bu noktada [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":5924,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[87],"tags":[224,225,116,190],"class_list":["post-6391","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-debezium-tr","tag-minio-tr","tag-spark-tr","tag-veri-gol-evi"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>A\u00e7\u0131k Kaynakl\u0131 Ara\u00e7larla LakeHouse: Apache Iceberg Case Study - Bentego<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A\u00e7\u0131k Kaynakl\u0131 Ara\u00e7larla LakeHouse: Apache Iceberg Case Study - Bentego\" \/>\n<meta property=\"og:description\" content=\"G\u00fcn\u00fcm\u00fcz veri platformlar\u0131nda g\u00fcncel ihtiya\u00e7lardan biri, veriyi g\u00fcvenilir \u015fekilde saklamak, ger\u00e7ek zamanl\u0131 de\u011fi\u015fiklikleri i\u015flemek ve analitik i\u00e7in tutarl\u0131 tablolar sunmak. Bu noktada [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/\" \/>\n<meta property=\"og:site_name\" content=\"Bentego\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-23T19:48:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-26T19:53:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1600\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Bentego\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bentego\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/\"},\"author\":{\"name\":\"Bentego\",\"@id\":\"https:\/\/bentego.com\/tr\/#\/schema\/person\/e38e5868721eddd5493704ec7b5be37c\"},\"headline\":\"A\u00e7\u0131k Kaynakl\u0131 Ara\u00e7larla LakeHouse: Apache Iceberg Case Study\",\"datePublished\":\"2025-12-23T19:48:32+00:00\",\"dateModified\":\"2026-02-26T19:53:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/\"},\"wordCount\":677,\"publisher\":{\"@id\":\"https:\/\/bentego.com\/tr\/#organization\"},\"image\":{\"@id\":\"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png\",\"keywords\":[\"Debezium\",\"Minio\",\"spark\",\"Veri G\u00f6l Evi\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"tr\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/\",\"url\":\"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/\",\"name\":\"A\u00e7\u0131k Kaynakl\u0131 Ara\u00e7larla LakeHouse: Apache Iceberg Case Study - Bentego\",\"isPartOf\":{\"@id\":\"https:\/\/bentego.com\/tr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png\",\"datePublished\":\"2025-12-23T19:48:32+00:00\",\"dateModified\":\"2026-02-26T19:53:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/#primaryimage\",\"url\":\"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png\",\"contentUrl\":\"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png\",\"width\":2400,\"height\":1600},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/bentego.com\/tr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A\u00e7\u0131k Kaynakl\u0131 Ara\u00e7larla LakeHouse: Apache Iceberg Case Study\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/bentego.com\/tr\/#website\",\"url\":\"https:\/\/bentego.com\/tr\/\",\"name\":\"Bentego\",\"description\":\"Turning data into enterprise value\",\"publisher\":{\"@id\":\"https:\/\/bentego.com\/tr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/bentego.com\/tr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/bentego.com\/tr\/#organization\",\"name\":\"Bentego\",\"url\":\"https:\/\/bentego.com\/tr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/bentego.com\/tr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/bentego.com\/wp-content\/uploads\/2025\/05\/logo-bentego.svg\",\"contentUrl\":\"https:\/\/bentego.com\/wp-content\/uploads\/2025\/05\/logo-bentego.svg\",\"width\":433,\"height\":109,\"caption\":\"Bentego\"},\"image\":{\"@id\":\"https:\/\/bentego.com\/tr\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/bentego.com\/tr\/#\/schema\/person\/e38e5868721eddd5493704ec7b5be37c\",\"name\":\"Bentego\",\"sameAs\":[\"http:\/\/bentego.com\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"A\u00e7\u0131k Kaynakl\u0131 Ara\u00e7larla LakeHouse: Apache Iceberg Case Study - Bentego","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:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/","og_locale":"tr_TR","og_type":"article","og_title":"A\u00e7\u0131k Kaynakl\u0131 Ara\u00e7larla LakeHouse: Apache Iceberg Case Study - Bentego","og_description":"G\u00fcn\u00fcm\u00fcz veri platformlar\u0131nda g\u00fcncel ihtiya\u00e7lardan biri, veriyi g\u00fcvenilir \u015fekilde saklamak, ger\u00e7ek zamanl\u0131 de\u011fi\u015fiklikleri i\u015flemek ve analitik i\u00e7in tutarl\u0131 tablolar sunmak. Bu noktada [&hellip;]","og_url":"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/","og_site_name":"Bentego","article_published_time":"2025-12-23T19:48:32+00:00","article_modified_time":"2026-02-26T19:53:03+00:00","og_image":[{"width":2400,"height":1600,"url":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png","type":"image\/png"}],"author":"Bentego","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Bentego","Tahmini okuma s\u00fcresi":"3 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/#article","isPartOf":{"@id":"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/"},"author":{"name":"Bentego","@id":"https:\/\/bentego.com\/tr\/#\/schema\/person\/e38e5868721eddd5493704ec7b5be37c"},"headline":"A\u00e7\u0131k Kaynakl\u0131 Ara\u00e7larla LakeHouse: Apache Iceberg Case Study","datePublished":"2025-12-23T19:48:32+00:00","dateModified":"2026-02-26T19:53:03+00:00","mainEntityOfPage":{"@id":"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/"},"wordCount":677,"publisher":{"@id":"https:\/\/bentego.com\/tr\/#organization"},"image":{"@id":"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/#primaryimage"},"thumbnailUrl":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png","keywords":["Debezium","Minio","spark","Veri G\u00f6l Evi"],"articleSection":["Blog"],"inLanguage":"tr"},{"@type":"WebPage","@id":"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/","url":"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/","name":"A\u00e7\u0131k Kaynakl\u0131 Ara\u00e7larla LakeHouse: Apache Iceberg Case Study - Bentego","isPartOf":{"@id":"https:\/\/bentego.com\/tr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/#primaryimage"},"image":{"@id":"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/#primaryimage"},"thumbnailUrl":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png","datePublished":"2025-12-23T19:48:32+00:00","dateModified":"2026-02-26T19:53:03+00:00","breadcrumb":{"@id":"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/"]}]},{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/#primaryimage","url":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png","contentUrl":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png","width":2400,"height":1600},{"@type":"BreadcrumbList","@id":"https:\/\/bentego.com\/tr\/acik-kaynakli-araclarla-lakehouse-apache-iceberg-case-study\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/bentego.com\/tr\/"},{"@type":"ListItem","position":2,"name":"A\u00e7\u0131k Kaynakl\u0131 Ara\u00e7larla LakeHouse: Apache Iceberg Case Study"}]},{"@type":"WebSite","@id":"https:\/\/bentego.com\/tr\/#website","url":"https:\/\/bentego.com\/tr\/","name":"Bentego","description":"Turning data into enterprise value","publisher":{"@id":"https:\/\/bentego.com\/tr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bentego.com\/tr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":"Organization","@id":"https:\/\/bentego.com\/tr\/#organization","name":"Bentego","url":"https:\/\/bentego.com\/tr\/","logo":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/bentego.com\/tr\/#\/schema\/logo\/image\/","url":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/05\/logo-bentego.svg","contentUrl":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/05\/logo-bentego.svg","width":433,"height":109,"caption":"Bentego"},"image":{"@id":"https:\/\/bentego.com\/tr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/bentego.com\/tr\/#\/schema\/person\/e38e5868721eddd5493704ec7b5be37c","name":"Bentego","sameAs":["http:\/\/bentego.com"]}]}},"_links":{"self":[{"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/posts\/6391","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/comments?post=6391"}],"version-history":[{"count":1,"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/posts\/6391\/revisions"}],"predecessor-version":[{"id":6392,"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/posts\/6391\/revisions\/6392"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/media\/5924"}],"wp:attachment":[{"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/media?parent=6391"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/categories?post=6391"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/tags?post=6391"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}