https://shauryashrivastava.medium.com/streaming-101-what-we-need-to-know-what-we-need-to-learn-71a96f14c1ac