This document provides an overview of the internals of Apache Flink. It discusses how Flink programs are compiled into execution plans by the Flink optimizer and executed in a pipelined fashion by the Flink runtime. The runtime uses optimized implementations of sorting and hashing to represent data internally as serialized bytes, avoiding object overhead. It also describes how Flink handles iterative programs and memory management. Overall, it explains how Flink hides complexity from users while providing high performance distributed processing.