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.

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.

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 di 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 tujuan On-failure, 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.