Tema ini menjelaskan aturan yang didefinisikan dalam format JSON pada Flink Complex Event Processing (CEP) dinamis.
Audience yang dituju
- Pengembang platform pengendalian risiko: Pengembang yang akrab dengan Flink CEP dinamis dapat mempelajari format yang dijelaskan dalam tema ini dan menentukan apakah enkapsulasi lebih lanjut diperlukan sesuai kebutuhan platform.
- Personel strategi pengendalian risiko: Personel yang hanya akrab dengan strategi pengendalian risiko tertentu tetapi tidak memiliki pengalaman pengembangan Java dapat mempelajari dan menggunakan format ini untuk menulis aturan baru berdasarkan konsep CEP serta menerapkannya dalam penerapan pengendalian risiko online.
Definisi aturan CEP dalam format JSON
- SimpulSebuah simpul menunjukkan pola lengkap. Tabel berikut menjelaskan bidang-bidang dalam pola.
Bidang Deskripsi Tipe data Diperlukan Catatan name Nama pola. STRING Ya String unik. Catatan Nama setiap simpul harus unik.type Tipe simpul. ENUM(STRING) Ya - Untuk simpul yang mencakup pola anak, nilai bidang ini adalah COMPOSITE.
- Untuk simpul yang tidak mencakup pola anak, nilai bidang ini adalah ATOMIC.
quantifier Kuantifier yang menggambarkan cara mencocokkan pola. Misalnya, Anda dapat menentukan kuantifier untuk mencocokkan pola hanya sekali. Kamus Ya Untuk informasi lebih lanjut, lihat "Quantifier" dalam tema ini. condition Kondisi. Kamus Tidak Untuk informasi lebih lanjut, lihat "Condition" dalam tema ini. - KuantifierKuantifier digunakan untuk menggambarkan cara mencocokkan peristiwa dengan pola. Misalnya, properti kuantifier dari pola
"A*"adalah LOOPING dan bidang consumingStrategy dari pola disetel ke SKIP_TILL_ANY.Bidang Deskripsi Tipe data Diperlukan Catatan consumingStrategy Strategi pemilihan peristiwa. ENUM(STRING) Ya Nilai valid: - STRICT
- SKIP_TILL_NEXT
- SKIP_TILL_ANY
Untuk informasi lebih lanjut tentang nilai-nilai dan artinya, lihat "Contiguity" dalam tema ini.
times Jumlah kali pola perlu dicocokkan. Kamus Tidak Contoh:"times": { "from": 3, "to": 3, "windowTime": { "unit": "MINUTES", "size": 12 } },Nilai from dan to harus bertipe INTEGER. Unit windowTime bisa DAYS, HOURS, MINUTES, SECONDS, atau MILLISECONDS.Catatan windowTime bisa disetel ke null. Properti ini ditampilkan dalam format berikut:"windowTime": null.properties Properti kuantifier. Array string enumerasi Ya Untuk informasi lebih lanjut tentang nilai-nilai dan artinya, lihat "Quantifier" dalam tema ini. untilCondition Kondisi yang digunakan untuk menghentikan pencocokan pola. Catatan Parameter ini hanya dapat dikonfigurasi setelah pola yang menggunakan kuantifier LOOPING.Kamus Tidak Untuk informasi lebih lanjut tentang nilai-nilai dan artinya, lihat "Condition" dalam tema ini. - KondisiKondisi digunakan untuk mengidentifikasi peristiwa yang memenuhi persyaratan tertentu. Misalnya, jika Anda ingin mengidentifikasi pengguna dengan durasi penjelajahan lebih dari 5 menit, Anda dapat menentukan kondisi bahwa durasi penjelajahan lebih dari 5 menit.
Bidang Deskripsi Tipe data Diperlukan Catatan type Tipe kondisi. ENUM(STRING) Ya Nilai valid: - CLASS: kondisi kustom.
- AVIATOR: kondisi berdasarkan ekspresi aviator.
- GROOVY: kondisi berdasarkan ekspresi Groovy.
... Bidang kustom lainnya yang dapat diserialisasi. Tidak ... Kondisi berikut didukung:- Kondisi tipe Class
Bidang Deskripsi Tipe data Diperlukan Catatan type Tipe kondisi. ENUM(STRING) Ya Setel nilai ke Class. className Nama kelas. STRING Ya Nama lengkap kelas, seperti com.alibaba.ververica.cep.demo.StartCondition. - Kondisi yang mencakup parameter kustom
Saat menggunakan kondisi tipe Class, Anda hanya dapat menentukan parameter className. Parameter tidak dapat dilewatkan secara dinamis. Untuk meningkatkan kemampuan ekspresi kondisi, Flink CEP dinamis mendukung kondisi CustomArgsCondition, yang mencakup parameter kustom. Dengan cara ini, Anda dapat mengonfigurasi parameter yang diperlukan dalam kondisi CustomArgsCondition dalam bentuk array string JSON dan secara dinamis membuat instance CustomArgsCondition. Dalam hal ini, Anda dapat memperbarui parameter kondisi secara dinamis tanpa perlu memodifikasi kode Java.
Bidang Deskripsi Tipe data Diperlukan Catatan type Tipe kondisi. ENUM(STRING) Ya Setel nilai ke Class. className Nama kelas. STRING Ya Nama lengkap kelas, seperti com.alibaba.ververica.cep.demo.CustomMiddleCondition.args Parameter kustom. Array string Ya Nilainya adalah array string. - Kondisi berdasarkan ekspresi aviatorAviator adalah mesin evaluasi ekspresi yang secara dinamis mengkompilasi ekspresi menjadi bytecode. Untuk informasi lebih lanjut, lihat aviatorscript. Oleh karena itu, Anda dapat menggunakan kondisi berdasarkan ekspresi aviator dalam penerapan untuk secara dinamis memodifikasi ambang batas kondisi tanpa perlu memodifikasi kode Java untuk mengkompilasi ulang dan menjalankan kode.
Bidang Deskripsi Tipe data Diperlukan Catatan type Nama kelas. STRING Ya Setel nilai ke AVIATOR. expression String ekspresi. STRING Ya Bidang ini menentukan string ekspresi dalam bentuk serupa dengan price > 10. Variabel price adalah bidang yang didefinisikan dalam kode Java. Anda dapat mengubah nilai string dalam database. Misalnya, jika Anda mengubah nilai string menjadi price > 20, ekspresi price > 20 dimuat secara dinamis dalam penerapan Flink CEP dinamis untuk membuat kondisi aviator baru untuk memproses peristiwa selanjutnya.
- Kondisi berdasarkan ekspresi GroovyGroovy adalah bahasa dinamis berbasis platform Java Virtual Machine (JVM). Untuk informasi lebih lanjut tentang sintaks Groovy, lihat Sintaks. Flink CEP dinamis memungkinkan Anda menggunakan ekspresi Groovy untuk mendefinisikan kondisi, sehingga ambang batas kondisi dapat dimodifikasi secara dinamis.
Bidang Deskripsi Tipe data Diperlukan Catatan type Nama kelas. STRING Ya Setel nilai ke GROOVY. expression String ekspresi. STRING Ya Bidang ini menentukan string ekspresi dalam bentuk serupa dengan price > 5.0 && name.contains("mid"). Variabel seperti price dan name adalah bidang yang didefinisikan dalam kode Java. Anda dapat mengubah nilai string dalam database. Misalnya, jika Anda mengubah nilai string menjadi price > 20 && name.contains("end"), string Groovy baru dimuat secara dinamis dalam penerapan Flink CEP dinamis untuk membuat kondisi Groovy baru untuk memproses peristiwa selanjutnya.
- Sisi
Bidang Deskripsi Tipe data Diperlukan Catatan source Nama pola sumber. STRING Ya Tidak ada. target Nama pola tujuan. STRING Ya Tidak ada. type Strategi pemilihan peristiwa. Kamus Ya Nilai valid: - STRICT
- SKIP_TILL_NEXT
- SKIP_TILL_ANY
- NOT_FOLLOW
- NOT_NEXT
Untuk informasi lebih lanjut tentang nilai-nilai dan artinya, lihat "Contiguity" dalam tema ini.
- GraphNode memperluas Node
GraphNode menunjukkan urutan pola lengkap. Setiap simpul GraphNode menunjukkan pola independen, sedangkan setiap sisi GraphNode menunjukkan cara mentransformasikan pola ke pola lain untuk mencocokkan peristiwa.
GraphNode dianggap sebagai subkelas dari Node dan dapat digunakan sebagai Node dalam GraphNode yang lebih besar, sehingga mendukung GroupPattern yang menunjukkan penumpukan pola. Dibandingkan dengan Node, GraphNode menyediakan jenis bidang tambahan berikut:- Bidang nodes dan edges yang menggambarkan struktur graf.
- Bidang window yang menggambarkan kebijakan jendela waktu dalam graf dan bidang afterMatchSkipStrategy yang menggambarkan strategi lewati yang digunakan setelah pencocokan peristiwa.
Tabel berikut menjelaskan bidang GraphNode.Bidang Deskripsi Tipe data Diperlukan Catatan name Nama pola komposit. STRING Ya String unik. Catatan Nama setiap graf harus unik.type Tipe simpul. ENUM(STRING) Ya Setel nilai ke COMPOSITE. version Versi format JSON yang digunakan oleh graf. INTEGER Ya Nilai default: 1. nodes Pola anak yang bersarang dalam pola. Array simpul Ya Nilai bidang ini adalah array. Array tidak boleh kosong. edges Hubungan koneksi antara pola anak yang bersarang. Array sisi Ya Nilai bidang ini adalah array. Array bisa kosong. window - Jika tipe jendela adalah FIRST_AND_LAST, bidang ini menunjukkan interval waktu maksimum antara awal dan akhir kecocokan lengkap dari pola komposit.
- Jika tipe jendela adalah PREVIOUS_AND_CURRENT, bidang ini menunjukkan interval waktu maksimum antara kecocokan dua pola anak yang berdekatan.
Kamus Tidak Contoh: "window": { "type": "FIRST_AND_LAST", "time": { "unit": "DAYS", "size": 1 } }Unit bisa DAYS, HOURS, MINUTES, SECONDS, atau MILLISECONDS. Tipe data bisa LONG atau INTEGER.
afterMatchSkipStrategy Strategi lewati setelah semua peristiwa dalam graf cocok. Kamus Ya Untuk informasi lebih lanjut, lihat "AfterMatchSkipStrategy" dalam tema ini. quantifier Kuantifier yang menggambarkan cara mencocokkan pola. Misalnya, Anda dapat menentukan kuantifier untuk mencocokkan pola hanya sekali. Kamus Ya Untuk informasi lebih lanjut, lihat "Quantifier" dalam tema ini. - AfterMatchSkipStrategy
Bidang Deskripsi Tipe data Diperlukan Catatan type Tipe strategi. ENUM(STRING) Ya Nilai valid:- NO_SKIP: mengembalikan setiap kecocokan sukses di output. Ini adalah nilai default.
- SKIP_TO_NEXT: membuang semua kecocokan parsial yang dimulai dengan peristiwa yang sama.
- SKIP_PAST_LAST_EVENT: membuang semua kecocokan parsial yang dimulai antara awal dan akhir kecocokan.
- SKIP_TO_FIRST: membuang semua kecocokan parsial yang dimulai antara awal kecocokan dan kemunculan pertama peristiwa bernama PatternName.
- SKIP_TO_LAST: membuang semua kecocokan parsial yang dimulai antara awal kecocokan dan kemunculan terakhir peristiwa bernama PatternName.
Untuk informasi lebih lanjut, lihat After Match Skip Strategy.
patternName Nama pola yang menggunakan strategi. STRING Tidak String unik. - Kekontinuan
Nilai valid Deskripsi STRICT Kekontinuan ketat. Peristiwa yang tidak cocok tidak dapat muncul di antara peristiwa yang cocok. SKIP_TILL_NEXT Kekontinuan longgar. Peristiwa yang tidak cocok dapat muncul di antara peristiwa yang cocok. Peristiwa yang tidak cocok diabaikan. SKIP_TILL_ANY Kekontinuan non-deterministik longgar. Nilai ini menunjukkan kekontinuan yang lebih longgar. Dalam mode kekontinuan ini, kecocokan tambahan untuk peristiwa tertentu yang cocok dapat diabaikan. NOT_NEXT Peristiwa berikutnya yang terjadi setelah peristiwa tidak dapat menjadi peristiwa tertentu. NOT_FOLLOW Peristiwa tertentu tidak dapat muncul kemudian. Untuk informasi lebih lanjut, lihat FlinkCEP - Complex event processing for Flink.
- Properti kuantifier
Nilai valid Deskripsi SINGLE Pola terjadi hanya sekali. LOOPING Pola adalah pola looping dan mungkin terjadi beberapa kali. Kuantifier ini mirip dengan tanda bintang (*) dan tanda plus (+) dalam ekspresi reguler. TIMES Pola dapat terjadi sejumlah kali tertentu. GREEDY Strategi pencocokan serakah digunakan untuk mencocokkan pola untuk mendapatkan jumlah kecocokan maksimum. OPTIONAL Pola bersifat opsional.
Contoh 1: Menggunakan pola umum
- Mendapatkan kupon untuk tempat acara.
- Menambahkan item ke keranjang belanja mereka lebih dari tiga kali.
- Tidak menyelesaikan pembayaran.
Pattern<Event, Event> pattern =
Pattern.<Event>begin("start")
.where(new StartCondition())
.optional()
.followedBy("middle")
.where(new MiddleCondition())
.timesOrMore(3)
.notFollowedBy("end")
.where(new EndCondition())
.within(Time.minutes(10));{
"name": "end",
"quantifier": {
"consumingStrategy": "SKIP_TILL_NEXT",
"properties": [
"SINGLE"
],
"times": null,
"untilCondition": null
},
"condition": null,
"nodes": [
{
"name": "end",
"quantifier": {
"consumingStrategy": "SKIP_TILL_NEXT",
"properties": [
"SINGLE"
],
"times": null,
"untilCondition": null
},
"condition": {
"className": "com.alibaba.ververica.cep.demo.condition.EndCondition",
"type": "CLASS"
},
"type": "ATOMIC"
},
{
"name": "middle",
"quantifier": {
"consumingStrategy": "SKIP_TILL_NEXT",
"properties": [
"LOOPING"
],
"times": {
"from": 3,
"to": 3,
"windowTime": null
},
"untilCondition": null
},
"condition": {
"className": "com.alibaba.ververica.cep.demo.condition.MiddleCondition",
"type": "CLASS"
},
"type": "ATOMIC"
},
{
"name": "start",
"quantifier": {
"consumingStrategy": "SKIP_TILL_NEXT",
"properties": [
"SINGLE",
"OPTIONAL"
],
"times": null,
"untilCondition": null
},
"condition": {
"className": "com.alibaba.ververica.cep.demo.condition.StartCondition",
"type": "CLASS"
},
"type": "ATOMIC"
}
],
"edges": [
{
"source": "middle",
"target": "end",
"type": "NOT_FOLLOW"
},
{
"source": "start",
"target": "middle",
"type": "SKIP_TILL_NEXT"
}
],
"window": {
"type": "FIRST_AND_LAST",
"time": {
"unit": "MINUTES",
"size": 10
}
},
"afterMatchStrategy": {
"type": "NO_SKIP",
"patternName": null
},
"type": "COMPOSITE",
"version": 1
}Contoh 2: Menggunakan kondisi yang mencakup parameter kustom dalam pola
Contoh ini menjelaskan cara menentukan strategi pemasaran yang berbeda untuk pelanggan dari kelas yang berbeda selama acara promosi e-commerce real-time. Misalnya, Anda dapat menentukan strategi pemasaran yang mengirim pesan teks terkait pemasaran kepada pelanggan Kelas A, strategi pemasaran yang mengirim kupon kepada pelanggan Kelas B, dan strategi pemasaran yang tidak mengambil tindakan pemasaran untuk pelanggan lainnya. Anda dapat mendefinisikan kondisi kelas umum dalam penerapan Anda untuk memenuhi persyaratan tersebut. Jika Anda ingin menyesuaikan strategi pemasaran saat kondisi kelas umum digunakan dalam penerapan Anda, Anda harus menulis ulang kode penerapan dan mengompilasi ulang serta menjalankan penerapan. Misalnya, Anda dapat memodifikasi strategi pemasaran yang mengirim kupon kepada pelanggan Kelas C. Untuk menyederhanakan operasi, Anda dapat menggunakan kondisi yang mencakup parameter kustom. Setelah Anda mendefinisikan cara menyesuaikan strategi berdasarkan parameter yang dilewatkan dalam kode, Anda hanya perlu mengubah nilai parameter yang dilewatkan dalam database. Nilai parameter yang dilewatkan adalah nilai parameter args dari kondisi yang mencakup parameter kustom. Misalnya, Anda dapat mengubah ["A", "B"] menjadi ["A", "B", "C"] untuk melakukan pembaruan dinamis strategi pemasaran.
"condition": {
"args": [
"A", "B"
],
"className": "org.apache.flink.cep.pattern.conditions.CustomMiddleCondition",
"type": "CLASS"
}"condition": {
"args": [
"A", "B", "C"
],
"className": "org.apache.flink.cep.pattern.conditions.CustomMiddleCondition",
"type": "CLASS"
}Untuk informasi lebih lanjut tentang cara menggunakan kondisi yang mencakup parameter kustom dalam skenario bisnis tertentu, lihat Demo.