

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

# Memfilter acara dari Amazon MSK dan sumber acara Apache Kafka yang dikelola sendiri
<a name="kafka-filtering"></a>

Anda dapat menggunakan pemfilteran peristiwa untuk mengontrol rekaman mana dari aliran atau antrian yang dikirim Lambda ke fungsi Anda. Untuk informasi umum tentang cara kerja penyaringan acara, lihat[Kontrol peristiwa mana yang dikirim Lambda ke fungsi Anda](invocation-eventfiltering.md).

**catatan**  
Amazon MSK dan pemetaan sumber acara Apache Kafka yang dikelola sendiri hanya mendukung pemfilteran pada kunci. `value`

**Topics**
+ [Dasar-dasar penyaringan acara Kafka](#filtering-kafka)

## Dasar-dasar penyaringan acara Kafka
<a name="filtering-kafka"></a>

Misalkan produser menulis pesan ke topik di cluster Kafka Anda, baik dalam format JSON yang valid atau sebagai string biasa. Contoh catatan akan terlihat seperti berikut, dengan pesan dikonversi ke string yang dikodekan Base64 di bidang. `value`

```
{
    "mytopic-0":[
        {
            "topic":"mytopic",
            "partition":0,
            "offset":15,
            "timestamp":1545084650987,
            "timestampType":"CREATE_TIME",
            "value":"SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==",
            "headers":[]
        }
    ]
}
```

Misalkan produser Apache Kafka Anda menulis pesan ke topik Anda dalam format JSON berikut.

```
{
    "device_ID": "AB1234",
    "session":{
        "start_time": "yyyy-mm-ddThh:mm:ss",
        "duration": 162
    }
}
```

Anda dapat menggunakan `value` kunci untuk memfilter catatan. Misalkan Anda ingin memfilter hanya catatan-catatan di mana `device_ID` dimulai dengan huruf AB. `FilterCriteria`Objeknya adalah sebagai berikut.

```
{
    "Filters": [
        {
            "Pattern": "{ \"value\" : { \"device_ID\" : [ { \"prefix\": \"AB\" } ] } }"
        }
    ]
}
```

Untuk kejelasan tambahan, berikut adalah nilai filter yang `Pattern` diperluas di JSON biasa.

```
{
    "value": {
        "device_ID": [ { "prefix": "AB" } ]
      }
}
```

Anda dapat menambahkan filter menggunakan konsol, AWS CLI atau AWS SAM templat.

------
#### [ Console ]

Untuk menambahkan filter ini menggunakan konsol, ikuti instruksi [Melampirkan kriteria filter ke pemetaan sumber peristiwa (konsol)](invocation-eventfiltering.md#filtering-console) dan masukkan string berikut untuk **kriteria Filter**.

```
{ "value" : { "device_ID" : [ { "prefix":  "AB" } ] } }
```

------
#### [ AWS CLI ]

Untuk membuat pemetaan sumber peristiwa baru dengan kriteria filter ini menggunakan AWS Command Line Interface (AWS CLI), jalankan perintah berikut.

```
aws lambda create-event-source-mapping \
    --function-name my-function \
    --event-source-arn arn:aws:kafka:us-east-2:123456789012:cluster/my-cluster/b-8ac7cc01-5898-482d-be2f-a6b596050ea8 \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"value\" : { \"device_ID\" : [ { \"prefix\":  \"AB\" } ] } }"}]}'
```

Untuk menambahkan kriteria filter ini ke pemetaan sumber peristiwa yang ada, jalankan perintah berikut.

```
aws lambda update-event-source-mapping \
    --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"value\" : { \"device_ID\" : [ { \"prefix\":  \"AB\" } ] } }"}]}'
```

------
#### [ AWS SAM ]

Untuk menambahkan filter ini menggunakan AWS SAM, tambahkan cuplikan berikut ke template YAMAL untuk sumber acara Anda.

```
FilterCriteria:
  Filters:
    - Pattern: '{ "value" : { "device_ID" : [ { "prefix":  "AB" } ] } }'
```

------

Dengan Kafka, Anda juga dapat memfilter catatan di mana pesannya adalah string biasa. Misalkan Anda ingin mengabaikan pesan-pesan di mana string adalah “kesalahan”. `FilterCriteria`Objek akan terlihat sebagai berikut.

```
{
    "Filters": [
        {
            "Pattern": "{ \"value\" : [ { \"anything-but\": [ \"error\" ] } ] }"
        }
    ]
}
```

Untuk kejelasan tambahan, berikut adalah nilai filter yang `Pattern` diperluas di JSON biasa.

```
{
    "value": [
        {
        "anything-but": [ "error" ]
        }
    ]
}
```

Anda dapat menambahkan filter menggunakan konsol, AWS CLI atau AWS SAM templat.

------
#### [ Console ]

Untuk menambahkan filter ini menggunakan konsol, ikuti instruksi [Melampirkan kriteria filter ke pemetaan sumber peristiwa (konsol)](invocation-eventfiltering.md#filtering-console) dan masukkan string berikut untuk **kriteria Filter**.

```
{ "value" : [ { "anything-but": [ "error" ] } ] }
```

------
#### [ AWS CLI ]

Untuk membuat pemetaan sumber peristiwa baru dengan kriteria filter ini menggunakan AWS Command Line Interface (AWS CLI), jalankan perintah berikut.

```
aws lambda create-event-source-mapping \
    --function-name my-function \
    --event-source-arn arn:aws:kafka:us-east-2:123456789012:cluster/my-cluster/b-8ac7cc01-5898-482d-be2f-a6b596050ea8 \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"value\" : [ { \"anything-but\": [ \"error\" ] } ] }"}]}'
```

Untuk menambahkan kriteria filter ini ke pemetaan sumber peristiwa yang ada, jalankan perintah berikut.

```
aws lambda update-event-source-mapping \
    --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"value\" : [ { \"anything-but\": [ \"error\" ] } ] }"}]}'
```

------
#### [ AWS SAM ]

Untuk menambahkan filter ini menggunakan AWS SAM, tambahkan cuplikan berikut ke template YAMAL untuk sumber acara Anda.

```
FilterCriteria:
  Filters:
    - Pattern: '{ "value" : [ { "anything-but": [ "error" ] } ] }'
```

------

Pesan Kafka harus berupa string yang dikodekan UTF-8, baik string biasa atau dalam format JSON. Itu karena Lambda menerjemahkan array byte Kafka ke UTF-8 sebelum menerapkan kriteria filter. Jika pesan Anda menggunakan pengkodean lain, seperti UTF-16 atau ASCII, atau jika format pesan tidak cocok dengan format`FilterCriteria`, Lambda hanya memproses filter metadata. Tabel berikut merangkum perilaku spesifik:


| Format pesan masuk | Format pola filter untuk properti pesan | Tindakan yang dihasilkan | 
| --- | --- | --- | 
|  Tali polos  |  Tali polos  |  Filter Lambda berdasarkan kriteria filter Anda.  | 
|  Tali polos  |  Tidak ada pola filter untuk properti data  |  Filter Lambda (hanya pada properti metadata lainnya) berdasarkan kriteria filter Anda.  | 
|  Tali polos  |  JSON yang valid  |  Filter Lambda (hanya pada properti metadata lainnya) berdasarkan kriteria filter Anda.  | 
|  JSON yang valid  |  Tali polos  |  Filter Lambda (hanya pada properti metadata lainnya) berdasarkan kriteria filter Anda.  | 
|  JSON yang valid  |  Tidak ada pola filter untuk properti data  |  Filter Lambda (hanya pada properti metadata lainnya) berdasarkan kriteria filter Anda.  | 
|  JSON yang valid  |  JSON yang valid  |  Filter Lambda berdasarkan kriteria filter Anda.  | 
|  String yang tidak dikodekan UTF-8  |  JSON, string polos, atau tidak ada pola  |  Filter Lambda (hanya pada properti metadata lainnya) berdasarkan kriteria filter Anda.  | 