Flink

官网
Flink Traning

Flink 操作二进制数据

现在很多项目如 Apache Spark, Apache Drill等运行在 JVM 上。如何在在基于 JVM 的数据上对大量数据进行排序、缓存和合并是常见的挑战。

把数据 Objects 直接放入 Heap 可能会导致 OutOfMemoryError 错误,GC 的负载也比较高。

Flink 把序列化的对象保存在一个固定的预分配的内存段里。通过使用DBMS风格的 sort 和 join 算法操作尽可能多的二进制数据,减少序列化和反序列化的压力。如图:

Flink

TaskManager MemoryManager IOManager

内存布局

Memory Segment 组织

Sort 操作



Flink 的内存管理的优势

  • Flink’s active memory management avoids nasty OutOfMemoryErrors that kill your JVMs and reduces garbage collection overhead.
  • Flink features a highly efficient data de/serialization stack that facilitates operations on binary data and makes more data fit into memory.
  • Flink’s DBMS-style operators operate natively on binary data yielding high performance in-memory and destage gracefully to disk if necessary.

off-heap 的好处

  • 大 JVM 操作比较困难,垃圾回收代价昂贵。
  • I/O 和 网络效率高,零拷贝
  • 缓存的数据不因为进程的crash而丢失

off-heap 缺点

  • on-heap 简单,直观
  • 临时内存 heap 中比较廉价
  • 在 heap 中的操作更快

results matching ""

    No results matching ""