تیم پلتفرم داده زنده گرب، که به عنوان Coban شناخته میشود، در موردPlumbing at scale،Optimally scaling Kakfa consumer applicationsوExposing Kafka via VPCEنوشته است. در این مقاله، ما به اهمیت قابلیت حرکت آسان داده به داخل و خارج از Kafka به روشی کمکد پرداختهایم و چگونگی دستیابی به این قابلیت را با Kafka Connect توضیح میدهیم.
برای ساختن یک پلتفرم جریان داده مدیریت شده در Grab، تیم Coban اقدامات زیر را انجام داده است:
مرکز داده ایکوسیستمی بر روی Apache Kafka به وجود آوردهاست. برای مورد استفاده های تراکنشی و تجزیه و تحلیلی، آن را به محیط تولیدی درآوردهاست.این پلتفرم به عنوان یک پلتفرم استاندارد صنعتی تست شده به شمار میرود.
در سال 2021، تیم Coban با آغاز یک سفر جدید (Kafka Connect) که امکان جابجایی داده ها به درون و بیرون Apache Kafka را به صورت بی هیچ کدی فراهم میکند، Grabbers را به جابجایی داده در Apache Kafka به طور بی درنگ و آسان قادر ساخت.
مجله زیبایی و درمانی آذر وت کاوکا انک استک Kafka Connectرا قابل مشاهد هست. منابع چندگانه داده و مخزن های داده مانند MySQL، S3 و Azure Data Explorer قبلاً پشتیبانی و تولید شده است.
این همان استک Kafka Connect Coban است که امروزه به آن شباهت دارد. تعدادی منبع داده و سینک داده مانند MySQL، S3 و Azure Data Explorer به عنوان نمونه های محدود پشتیبانی و تولید شده است.
تیم Coban برای سریالیزه-دیسریالیسه (SerDes) از Protobuf استفاده میکند. بنابراین، نقش ثبت نام سازی Confluent (نشان داده شده در بالای شکل) برای اکوسیستم Kafka Connect حیاتی است، زیرا به عنوان ابزاری برای تبدیلاتی مانند Protobuf-to-Avro، Protobuf-to-JSON و Protobuf-to-Parquet عمل میکند.
مشکلات ما چیست؟
مشکل 1: ثبت تغییرات داده (CDC)
در یک سازمان بزرگ مانند Grab، ما با حجم بزرگی از داده و تغییرات در خدمات مختلف روبهرو هستیم. بنابراین، برای این تغییرات باید به صورت زمان واقعی باشیم.
علاوه بر این، تحدیدفنی های دیگری وجود دارند که باید پاسخ داده شوند:
همانطور که در شکل زیر نشان داده شده است، داده دوبار در کد نوشته میشود - یک بار در پایگاه داده (DB) و یک بار به عنوان یک پیام به Kafka. برای اینکه داده در DB و Kafka سازگار باشند، دو نوشتار باید اتمی در یک پروتکل هماهنگی دو مرحلهای (یا سایر پروتکل های رایگیری اتمی) باشند که مسئله غیرتافه و تاثیرگذار بر دسترسی است. برخی از موارد استفاده نیاز به داده های قبل و پس از یک تغییر دارند.
مشکل 2: بهرهبرداری از پیام برای بازیابی بعد از بروز فاجعه
تیم Coban تحقیقاتی در مورد Kafka MirrorMaker، یک راه حل متنباز، انجام داده است. در حالی که این راه حل تضمین کننده توافق داده بهتر است، اما برای بهرهبرداری از آن در زیرساخت Kubernetes موجودیتهای بزرگ میطلبد که توسط تیم Coban میزبانی میشود و به دستیابی به در دسترسی بالا نیاز دارد.
یکی از چالشهای اصلی دیگری که تیم Coban روبهرو هست، میرور کردن و ترجمه آفست است که یک چالش شناخته شده در جوامع Kafka است. برای اینکه مصرفکنندههای Kafka پس از یک فاجعه به طور بیدرنگ کار خود را با یک Kafka پشتیبانی از برونریسی کنند، باید برای آن توجه شود.
جذب داده به Azure Event Hubs
Azure Event Hubs یک رابط سازگار با Kafka دارد و به طور طبیعی JSON و Avro schema را پشتیبانی میکند. تیم Coban از چارچوب SerDes Protobuf استفاده میکند که توسط Azure Event Hubs پشتیبانی نمیشود. به این معنی است که برای جذب پیام به Azure Event Hubs، تبدیلات باید انجام شود.
راهحل
برای حل این مشکلات، تیم Coban Kafka Connect را انتخاب کرده است زیرا:
این یک چارچوب متنباز با جامعترین جامعه نسبتاً بزرگی است که در صورت بروز مشکلات میتوانیم به آنها مراجعه کنیم.قابلیت هایی برای اعمال تغییرات و تبدیلات سفارشی دارد.
بیایید ببینیم چگونه Kafka Connect میتواند برای حل مشکلات قبلاً اشاره شده استفاده شود.
Kafka Connect با استفاده از کانکتورهای Debezium
Debezium یک چارچوب برای ثبت تغییرات داده بر روی Apache Kafka و چارچوب Kafka Connect است. این چارچوب یک سری کانکتور برای دیتابیس های مختلف مانند MySQL، MongoDB و Cassandra ارائه میدهد.
اینجا مزایای جریانهای MySQLbinlog آورده شده است:
نه تنها تغییرات را در داده ارائه میدهند، بلکه تصاویر داده قبل و بعد از یک تغییر خاص را نیز میدهند. برخی از تولیدکنندگان دیگر نیازی به ارسال پیام به Kafka پس از نوشتن یک ردیف در پایگاه داده MySQL ندارند. با استفاده از کانکتورهای Debezium، سرویسها میتوانند تنها با دیتابیس MySQL سروکار داشته باشند و به Kafka مراجعه نکنند.
معماری
در صورت ارتقا و خرابی پایگاه داده
تغییرات زبان تعریف داده (DDL)، مهاجرت، تقسیم و خرابیهای پایگاه داده رایج در عملیات پایگاه داده هستند و هر نوع عملیاتی یک راهحل منظم دارد.
کانکتور Debezium ویژگیهای داخلی برای مدیریت تغییرات DDL ایجاد شده توسط ابزارهای مهاجرت DB مانندpt-online-schema-change دارد که توسط تیم DB Ops مجله زیبایی و درمانی آذروت استفاده میشود.
برای مقابله با تغییرات نمونه MySQL و تقسیم پایگاه داده، تیم Coban از قابلیت تغییر آفست کانکتورهای Kafka Connect استفاده میکند. با تغییر آفست، کانکتورهای Debezium میتوانند پس از مهاجرت پایگاه داده و همگامسازی خطاکنش binlog از هر مکانی در هر فایل binlog در یک نمونه MySQL به درستی عمل کنند.
برای اطلاعات بیشتر به مستندات Debezium مراجعه کنید.
داستان های موفقیت
پروژه CDC برای MySQL از طریق کانکتورهای Debezium در Grab بسیار موفق بود. یکی از مثال های بزرگ، بهینه سازی Elasticsearch در GrabFood است که در یک مقاله مرور شده است.
MirrorMaker2 با ترجمه آفست
MirrorMaker2 (MM2) که در کنار پروژه Apache Kafka توسعه و همراه با آن عرضه میشود، یک ابزار برای کپی کردن پیام ها و آفست های مصرفکننده است. با این حال، در تیم Coban، استک MM2 در چارچوب Kafka Connect برای هر کانکتور اجرا میشود زیرا:
چندین خوشه Kafka Connect قبلاً تامین شده است.نسبت به راهاندازی سه کانکتور گروهبندی شده در MM2، Coban میتواند کنترل های دقیق تری روی MirrorSourceConnector و MirrorCheckpointConnector داشته باشد و هر دو را به صورت کد زیرساخت مدیریت کند از طریق Hashicorp Terraform.
داستان های موفقیت
حفظ پیوستگی کسب و کار یک اولویت اصلی برای مجله زیبایی و درمانی آذروت است و این شامل توانایی بازیابی سریع از حوادث است. در نیمه دوم سال 2021، یک کمپین انجام شده است که در آن تیم های زیادی برای بررسی آمادگی و انعطاف پذیری خدمات و میانافزارهای مختلف مورد بررسی قرار گرفتند. Kafka Coban یکی از این خدمات است که پس از مراحل مختلف مهندسی به استحکام رسید. با MM2 در Kafka Connect برای آینه کردن هم پیام ها و هم آفست مصرفکننده، خدمات و لولههای بحرانی در صورت خرابی میتوانند به طور ایمن تکثیر و در مناطق AWS راهاندازی شوند.
چون تیم Coban خود را به عنوان ارائه دهنده خدمات Kafka تست شده در Grab ثابت کرده است، تیم های دیگر نیز درخواست تغییر جریانها از خوشه های Kafka خودمدیریت شده به خوشه هایی مدیریت شده توسط Coban داشته اند. MM2 در چنین مهاجرت هایی استفاده شده و به جریان تولیدکنندگان و مصرفکنندگان صفر زمان متوقفی وارد کرده است.
آینه زدن به Azure Event Hubs با تبدیل کننده داخلی
تیم Analytics پروژه های مقیاس بندی و تجزیه و تحلیل به صورت زمان واقعی را در Azure اجرا میکند. برای پشتیبانی از این حالت استفاده از چندین ابر، تیم Coban از MM2 برای آینه زدن پیام به Azure Event Hubs استفاده میکند.
به طور معمول، Event Hubs تنها بایت های JSON و Avro را قبول میکند که با چارچوب SerDes موجود سازگار نیست. تیم Coban یک تبدیل کننده سفارشی توسعه داده است که بایت های سریالشده در Protobuf را به بایت های JSON تبدیل میکند.
این مراحل توضیح میدهند چگونه تبدیلکننده عمل میکند:
بایت ها را در Kafka بر اساس یک پیام ProtobufDynamicMessage و به تبع آن یک ساختار تجزیهسازی مجدد بر اساس طرحی که از ثبت نام سازی طرح Confluent دریافت میشود، رمزگشایی کنید.به ازای هر توصیف کننده فیلد درDynamicMessage، یک جستجوی عمق اول ترتیبی پس مرتبه را انجام دهید.هر توصیف کننده فیلد Protobuf را به یک گره JSON تبدیل کنید.ریشه را به عنوان یک گره JSON سریال کنید.
تاکنون تبدیل کننده به صورت باز متن نشده است.
راه اندازی
کانکتورهای Docker برای Coban زیرساختی است که تیم از آن استفاده میکند، به خصوص اینکه برخی از خوشه های Kafka تولیدی از قبل در Kubernetes پیاده سازی شدهاند. هدف بلند مدت ارائه Kafka در قالب یک مدل نرمافزار به عنوان خدمت (SaaS) است، به همین دلیل Kubernetes انتخاب شده است. نمودار زیر نحوه ساخت و راهاندازی خوشه های Kafka Connect را نشان میدهد.
چه چیزی بعدی است؟
تیم Coban بر روی یک صفحه کنترل یکپارچه برای مدیریت منابعی مانند تاپیک ها، خوشه ها و Kafka Connect در حال چرخش است. در آینده قابل پیش بینی، کاربران داخلی باید