ملاحظة: السياسة المعروضة في الفيديو واسعة الصلاحيات، وهي مخصّصة للبدء السريع فقط. راجع أدناه إرشادات IAM الخاصة بمبدأ أقل الامتيازات.
المتطلبات الأساسية
نفترض ما يلي:
- أنك على دراية بـ ClickHouse Connector Sink،
- أنك على دراية بـ Amazon MSK وموصلات MSK. نوصي بالرجوع إلى دليل البدء لـ Amazon MSK ودليل MSK Connect.
موصل Kafka الرسمي من ClickHouse مع Amazon MSK
اجمع بيانات الاتصال الخاصة بك
للاتصال بـ ClickHouse باستخدام HTTP(S)، تحتاج إلى المعلومات التالية:
| المعلمات | الوصف |
|---|---|
HOST and PORT |
عادةً ما يكون المنفذ 8443 عند استخدام TLS، أو 8123 عند عدم استخدام TLS. |
DATABASE NAME |
افتراضيًا، توجد قاعدة بيانات باسم default. استخدم اسم قاعدة البيانات التي تريد الاتصال بها. |
USERNAME and PASSWORD |
افتراضيًا، يكون اسم المستخدم default. استخدم اسم المستخدم المناسب لحالة الاستخدام لديك. |
تتوفر تفاصيل خدمة ClickHouse Cloud الخاصة بك في ClickHouse Cloud console. حدِّد خدمة ثم انقر على Connect:

اختر HTTPS. ستظهر تفاصيل الاتصال في مثال لأمر curl.

إذا كنت تستخدم ClickHouse مُدارًا ذاتيًا، فسيُحدِّد مسؤول ClickHouse لديك تفاصيل الاتصال.
الخطوات
- تأكد من أنك على دراية بـ ClickHouse Connector Sink
- أنشئ مثيل MSK.
- أنشئ IAM role وعيّنه.
- نزّل ملف
jarمن صفحة Release الخاصة بـ ClickHouse Connect Sink. - ثبّت ملف
jarالذي نزّلته من صفحة Custom plugin في وحدة تحكم Amazon MSK. - إذا كان الـ connector يتواصل مع مثيل ClickHouse عام، فعّل الوصول إلى الإنترنت.
- أدخل topic name واسم المضيف لمثيل ClickHouse وpassword في config.
connector.class=com.clickhouse.kafka.connect.ClickHouseSinkConnector
tasks.max=1
topics=<topic_name>
ssl=true
security.protocol=SSL
hostname=<hostname>
database=<database_name>
password=<password>
ssl.truststore.location=/tmp/kafka.client.truststore.jks
port=8443
value.converter.schemas.enable=false
value.converter=org.apache.kafka.connect.json.JsonConverter
exactlyOnce=true
username=default
schemas.enable=falseأذونات IAM الموصى بها (مبدأ الحد الأدنى من الصلاحيات)
استخدم أقل مجموعة من الأذونات المطلوبة لإعدادك. ابدأ بالأساس أدناه، ولا تُضِف الخدمات الاختيارية إلا إذا كنت تستخدمها.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "MSKClusterAccess",
"Effect": "Allow",
"Action": [
"kafka:DescribeCluster",
"kafka:GetBootstrapBrokers",
"kafka:DescribeClusterV2",
"kafka:ListClusters",
"kafka:ListClustersV2"
],
"Resource": "*"
},
{
"Sid": "KafkaAuthorization",
"Effect": "Allow",
"Action": [
"kafka-cluster:Connect",
"kafka-cluster:DescribeCluster",
"kafka-cluster:DescribeGroup",
"kafka-cluster:DescribeTopic",
"kafka-cluster:ReadData"
],
"Resource": "*"
},
{
"Sid": "OptionalGlueSchemaRegistry",
"Effect": "Allow",
"Action": [
"glue:GetSchema*",
"glue:ListSchemas",
"glue:ListSchemaVersions"
],
"Resource": "*"
},
{
"Sid": "OptionalSecretsManager",
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue"
],
"Resource": [
"arn:aws:secretsmanager:<region>:<account-id>:secret:<your-secret-name>*"
]
},
{
"Sid": "OptionalS3Read",
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::<your-bucket>/<optional-prefix>/*"
}
]
}- استخدم قسم Glue فقط إذا كنت تستخدم AWS Glue Schema Registry.
- استخدم قسم Secrets Manager فقط إذا كنت تجلب بيانات الاعتماد/مخازن الثقة من Secrets Manager. احصر ARN في النطاق المطلوب.
- استخدم قسم S3 فقط إذا كنت تحمّل الملفات (مثل truststore) من S3. احصر النطاق في bucket/البادئة.
انظر أيضًا: أفضل ممارسات Kafka – IAM.
تحسين الأداء
تتمثل إحدى طرق تحسين الأداء في ضبط حجم الدفعة وعدد السجلات التي تُجلَب من Kafka، وذلك بإضافة ما يلي إلى إعدادات العامل:
consumer.max.poll.records=[NUMBER OF RECORDS]
consumer.max.partition.fetch.bytes=[NUMBER OF RECORDS * RECORD SIZE IN BYTES]ستختلف القيم التي تستخدمها وفقًا للعدد المطلوب من السجلات وحجم كل سجل. على سبيل المثال، القيم الافتراضية هي:
consumer.max.poll.records=500
consumer.max.partition.fetch.bytes=1048576يمكنك العثور على مزيد من التفاصيل (سواء بشأن التنفيذ أو الاعتبارات الأخرى) في الوثائق الرسمية لكلٍّ من Kafka و Amazon MSK.
ملاحظات حول الشبكات الخاصة بـ MSK Connect
لكي يتمكن MSK Connect من الاتصال بـ ClickHouse، نوصي بأن تكون مجموعة MSK الخاصة بك ضمن شبكة فرعية خاصة مع NAT gateway خاص متصل بالإنترنت. ترد أدناه إرشادات إعداد ذلك. لاحظ أن الشبكات الفرعية العامة مدعومة، لكنها غير موصى بها بسبب الحاجة إلى تعيين عنوان Elastic IP باستمرار إلى ENI لديك. توفر AWS مزيدًا من التفاصيل هنا
- إنشاء شبكة فرعية خاصة: أنشئ شبكة فرعية جديدة داخل VPC لديك، وحددها كشبكة فرعية خاصة. يجب ألا يكون لهذه الشبكة الفرعية وصول مباشر إلى الإنترنت.
- إنشاء NAT gateway: أنشئ NAT gateway في شبكة فرعية عامة ضمن VPC لديك. يتيح NAT gateway للمثيلات الموجودة في شبكتك الفرعية الخاصة الاتصال بالإنترنت أو بخدمات AWS الأخرى، لكنه يمنع الإنترنت من بدء اتصال مع هذه المثيلات.
- تحديث جدول التوجيه: أضف مسارًا يوجّه حركة المرور المتجهة إلى الإنترنت إلى NAT gateway.
- ضمان إعداد مجموعة الأمان وACLs للشبكة: اضبط مجموعة الأمان وACLs للشبكة (Access Control Lists) للسماح بحركة المرور ذات الصلة.
- من ENI الخاصة بعاملي MSK Connect إلى brokers الخاصة بـ MSK على منفذ TLS (عادةً 9094).
- من ENI الخاصة بعاملي MSK Connect إلى endpoint الخاص بـ ClickHouse: 9440 (native TLS) أو 8443 (HTTPS).
- اسمح بحركة المرور Inbound على broker SG من عامل SG الخاص بـ MSK Connect.
- بالنسبة إلى ClickHouse ذاتي الاستضافة، افتح المنفذ المُعدّ على server لديك (القيمة default هي 8123 لـ HTTP).
- إرفاق مجموعة الأمان بـ MSK: تأكد من أن مجموعات الأمان هذه مرفقة بمجموعة MSK وعاملي MSK Connect.
- الاتصال بـ ClickHouse Cloud:
- public endpoint + قائمة سماح IP: يتطلب egress عبر NAT من الشبكات الفرعية الخاصة.
- الاتصال الخاص حيثما كان متاحًا (مثل VPC peering/PrivateLink/VPN). تأكد من تمكين أسماء مضيفات DNS/الدقة الخاصة بـ VPC وأن DNS يمكنه تحليل private endpoint.
- التحقق من الاتصال (قائمة تحقق سريعة):
- من بيئة connector، قم بتحليل DNS التمهيدي لـ MSK واتصل عبر TLS بمنفذ broker.
- أنشئ TLS connection إلى ClickHouse على المنفذ 9440 (أو 8443 لـ HTTPS).
- إذا كنت تستخدم خدمات AWS (Glue/Secrets Manager)، فاسمح بـ egress إلى تلك endpoints.