View a markdown version of this page

Menggunakan topik Kafka sebagai tujuan kegagalan - AWS Lambda

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan topik Kafka sebagai tujuan kegagalan

Anda dapat mengonfigurasi topik Kafka sebagai tujuan gagal untuk pemetaan sumber acara Kafka Anda. Ketika Lambda tidak dapat memproses catatan setelah percobaan ulang yang melelahkan atau ketika catatan melebihi usia maksimum, Lambda mengirimkan catatan yang gagal ke topik Kafka yang ditentukan untuk diproses nanti. Saat Anda mengonfigurasi percobaan ulang tak terbatas dan tujuan saat gagal, Lambda secara otomatis menerapkan maksimal 10 percobaan ulang.

Cara kerja tujuan on-failure Kafka

Saat Anda mengonfigurasi topik Kafka sebagai tujuan yang gagal, Lambda bertindak sebagai produser Kafka dan menulis catatan gagal ke topik tujuan. Ini menciptakan pola topik surat mati (DLT) dalam infrastruktur Kafka Anda.

  • Persyaratan cluster yang sama - Topik tujuan harus ada di cluster Kafka yang sama dengan topik sumber Anda.

  • Konten rekaman aktual — Tujuan Kafka menerima catatan gagal aktual bersama dengan metadata kegagalan.

  • Pencegahan rekursi — Lambda mencegah loop tak terbatas dengan memblokir konfigurasi di mana topik sumber dan tujuan sama.

Otentikasi untuk tujuan Kafka

Tujuan kegagalan Kafka tidak memiliki pengaturan otentikasi sendiri. Topik tujuan berada dalam klaster yang sama dengan topik sumber Anda, jadi Lambda menulis catatan gagal dengan otentikasi yang telah Anda konfigurasikan dalam SourceAccessConfigurations parameter pemetaan sumber peristiwa.

Ini berlaku untuk setiap metode otentikasi yang didukung Lambda untuk Kafka, termasuk OAuth 2.0 OAUTHBEARER_AUTH (), IAM (), dan IAM with IAM_AUTH (). SASL/OAUTHBEARER IAM_OAUTHBEARER_AUTH Jika Anda mengautentikasi dengan OAuth 2.0, Lambda menggunakan penyedia identitas yang sama dan rahasia yang sama untuk mendapatkan token untuk memproduksi ke topik tujuan. Konfigurasikan otentikasi sekali, dalam konfigurasi akses sumber. Untuk informasi selengkapnya, lihat Mengkonfigurasi metode otentikasi cluster di Lambda Kafka yang dikelola sendiri dan Mengonfigurasi metode otentikasi klaster MSK Amazon di Lambda Amazon MSK.

Pastikan identitas yang Anda autentikasi dapat menulis ke topik tujuan, tidak hanya dibaca dari topik sumber Anda. Untuk otentikasi IAM, itu berarti kafka-cluster:WriteData pada topik tujuan. Untuk metode lain, itu berarti izin tulis yang setara dalam aturan otorisasi klaster Anda.

Mengonfigurasi tujuan pada kegagalan Kafka

Anda dapat mengonfigurasi topik Kafka sebagai tujuan gagal saat membuat atau memperbarui pemetaan sumber acara Kafka.

Mengkonfigurasi tujuan Kafka (konsol)

Untuk mengonfigurasi topik Kafka sebagai tujuan gagal (konsol)
  1. Buka halaman Fungsi Acara konsol Lambda.

  2. Pilih nama fungsi Anda.

  3. Lakukan salah satu tindakan berikut:

    • Untuk menambahkan pemicu Kafka baru, di bawah Ikhtisar fungsi, pilih Tambah pemicu.

    • Untuk memodifikasi pemicu Kafka yang ada, pilih pemicu dan kemudian pilih Edit.

  4. Di bawah Pengaturan tambahan, untuk On-failure tujuan, pilih topik Kafka.

  5. Untuk nama Topik, masukkan nama topik Kafka tempat Anda ingin mengirim catatan yang gagal.

  6. Pilih Tambah atau Simpan.

Mengkonfigurasi tujuan Kafka (AWS CLI)

Gunakan kafka:// awalan untuk menentukan topik Kafka sebagai tujuan kegagalan.

Membuat pemetaan sumber acara dengan tujuan Kafka

Contoh berikut membuat pemetaan sumber peristiwa MSK Amazon dengan topik Kafka sebagai tujuan kegagalan:

aws lambda create-event-source-mapping \ --function-name my-kafka-function \ --topics AWSKafkaTopic \ --event-source-arn arn:aws:kafka:us-east-1:123456789012:cluster/my-cluster/abc123 \ --starting-position LATEST \ --provisioned-poller-config MinimumPollers=1,MaximumPollers=3 \ --destination-config '{"OnFailure":{"Destination":"kafka://failed-records-topic"}}'

Untuk Kafka yang dikelola sendiri, gunakan sintaks yang sama:

aws lambda create-event-source-mapping \ --function-name my-kafka-function \ --topics AWSKafkaTopic \ --self-managed-event-source '{"Endpoints":{"KAFKA_BOOTSTRAP_SERVERS":["abc.xyz.com:9092"]}}' \ --starting-position LATEST \ --provisioned-poller-config MinimumPollers=1,MaximumPollers=3 \ --destination-config '{"OnFailure":{"Destination":"kafka://failed-records-topic"}}'

Memperbarui tujuan Kafka

Gunakan update-event-source-mapping perintah untuk menambah atau memodifikasi tujuan Kafka:

aws lambda update-event-source-mapping \ --uuid 12345678-1234-1234-1234-123456789012 \ --destination-config '{"OnFailure":{"Destination":"kafka://failed-records-topic"}}'

Format rekaman untuk tujuan Kafka

Ketika Lambda mengirim catatan gagal ke topik Kafka, setiap pesan berisi metadata tentang kegagalan dan konten rekaman yang sebenarnya.

Metadata kegagalan

Metadata mencakup informasi tentang mengapa catatan gagal dan detail tentang batch asli:

{ "requestContext": { "requestId": "e4b46cbf-b738-xmpl-8880-a18cdf61200e", "functionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function:$LATEST", "condition": "RetriesExhausted", "approximateInvokeCount": 3 }, "responseContext": { "statusCode": 200, "executedVersion": "$LATEST", "functionError": "Unhandled" }, "version": "1.0", "timestamp": "2019-11-14T18:16:05.568Z", "KafkaBatchInfo": { "batchSize": 1, "eventSourceArn": "arn:aws:kafka:us-east-1:123456789012:cluster/my-cluster/abc123", "bootstrapServers": "b-1.mycluster.abc123.kafka.us-east-1.amazonaws.com:9098", "payloadSize": 1162, "recordInfo": { "offset": "49601189658422359378836298521827638475320189012309704722", "timestamp": "2019-11-14T18:16:04.835Z" } }, "payload": { "bootstrapServers": "b-1.mycluster.abc123.kafka.us-east-1.amazonaws.com:9098", "eventSource": "aws:kafka", "eventSourceArn": "arn:aws:kafka:us-east-1:123456789012:cluster/my-cluster/abc123", "records": { "my-topic-0": [ { "headers": [], "key": "dGVzdC1rZXk=", "offset": 100, "partition": 0, "timestamp": 1749116692330, "timestampType": "CREATE_TIME", "topic": "my-topic", "value": "dGVzdC12YWx1ZQ==" } ] } } }

Perilaku kunci partisi

Lambda menggunakan kunci partisi yang sama dari catatan asli saat memproduksi ke topik tujuan. Jika rekaman asli tidak memiliki kunci, Lambda menggunakan partisi round-robin default Kafka di semua partisi yang tersedia di topik tujuan.

Persyaratan dan pembatasan

  • Diperlukan mode yang disediakan - Tujuan saat kegagalan Kafka hanya tersedia untuk pemetaan sumber peristiwa dengan mode yang disediakan diaktifkan.

  • Hanya cluster yang sama - Topik tujuan harus ada di cluster Kafka yang sama dengan topik sumber Anda.

  • Izin topik - Pemetaan sumber acara Anda harus memiliki izin menulis ke topik tujuan. Contoh:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ClusterPermissions", "Effect": "Allow", "Action": [ "kafka-cluster:Connect", "kafka-cluster:DescribeCluster", "kafka-cluster:DescribeTopic", "kafka-cluster:WriteData", "kafka-cluster:ReadData" ], "Resource": [ "arn:aws:kafka:*:*:cluster/*" ] }, { "Sid": "TopicPermissions", "Effect": "Allow", "Action": [ "kafka-cluster:DescribeTopic", "kafka-cluster:WriteData", "kafka-cluster:ReadData" ], "Resource": [ "arn:aws:kafka:*:*:topic/*/*" ] }, { "Effect": "Allow", "Action": [ "kafka:DescribeCluster", "kafka:GetBootstrapBrokers", "kafka:Produce" ], "Resource": "arn:aws:kafka:*:*:cluster/*" }, { "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DeleteNetworkInterface", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups" ], "Resource": "*" } ] }
  • Tidak ada rekursi - Nama topik tujuan tidak boleh sama dengan nama topik sumber Anda.