إتقان Apache Flink: العمود الفقري لأنظمة معالجة البيانات في الوقت الفعلي
في المشهد الحديث للبيانات، لم تعد المعالجة الدفعية كافية. تطلب المؤسسات رؤى فورية، مما يستلزم أنظمة قادرة على معالجة الأحداث فور حدوثها. برز Apache Flink كمعيار فعلي لهذه الحاجة، حيث يقدم محركاً قوياً وعالي الأداء للحسابات ذات الحالة عبر كل من تدفقات البيانات المحدودة وغير المحدودة. تستكشف هذه المقالة الآليات الأساسية التي تجعل Flink أداة قوية للمطورين من المستوى المتوسط إلى المتقدم.
stream = inputStream.assignTimestampsAndWatermarks(
WatermarkStrategy.forBoundedOutOfOrderness(Duration.ofSeconds(5))
.withTimestampAssigner((event, timestamp) -> event.getTimestamp())
);
```
في المثال أعلاه، نتسامح مع حدوث أحداث غير مرتبة زمنياً تصل مدتها إلى 5 ثوانٍ. يضمن ذلك إغلاق النوافذ الزمنية فقط عندما يكون النظام متأكداً من عدم ورود أحداث متأخرة بشكل كبير، مما يسمح بتجميع دقيق دون التضحية الزائدة عن الحد في زمن الاستجابة.
counts = input
.keyBy(value -> value.getId())
.flatMap(new CountWindowAverage());
public static class CountWindowAverage implements FlatMapFunction, Tuple2> {
private transient ValueState sum;
@Override
public void open(Configuration parameters) {
ValueStateDescriptor descriptor = new ValueStateDescriptor<>("average-sum", Long.class);
sum = getRuntimeContext().getState(descriptor);
}
@Override
public void flatMap(Tuple2 value, Collector> out) throws Exception {
Long currentSum = sum.value();
currentSum += value.f1;
sum.update(currentSum);
// Emit average every 5 elements
if (/* count logic */) {
out.collect(Tuple2.of(value.f0, currentSum / 5));
}
}
}
```
توضح مقتطفات الكود هذه كيفية الحفاظ على مجموع متراكم لكل مفتاح. يتم دعم الحالة بواسطة الخلفية الخاصة بحالة Flink (RocksDB أو HashMap) وهي مقاومة للأعطال.
pattern = Pattern.begin("start")
.where(new SimpleCondition() {
@Override
public boolean filter(Event value) { return value.name().equals("login"); }
})
.next("middle")
.where(new SimpleCondition() {
@Override
public boolean filter(Event value) { return value.amount() > 1000; }
})
.within(Time.seconds(10));
```
يبحث هذا النمط عن حدث "تسجيل دخول" يتبعه معاملة ذات قيمة عالية خلال 10 ثوانٍ، مما يمكّن من كشف الاحتيال في الوقت الفعلي.