Kafka
1)Kafka是大数据里面难度较大,而且使用广泛的一个技术,倒不是说使用起来难度大,而是说使用过程中容易出问题,但是生产又对其稳定性要求高。通过剖析其里面的源码可以帮助大家深刻理解Kafka的原理,便于大家去解决生产中的问题。
2)Kafka的源码的质量是我看过的大数据的开源产品里面质量最好的。其代码质量远超于hadoop,Spark等产品。整体代码阅读起来难度也不大,而且清晰。最关键的是在里面可以学到较多的架构的知识,这些知识在一般的架构课里面是学不到的。还可以偷偷的告诉大家,里面的有些代码漂亮的代码,可以直接复制粘贴到你的项目里。
提升大家编码能力,系统架构能力
支持高并发,高性能,高可用的的消息系统。
学习Kafka的源码需要储备哪些知识?
1)熟悉java的IO,线程,并发方面的知识
2)要会NIO方面的知识,因为Kafka的网络就是使用的 java NIO,磁盘读写也是用的java NIO
3)会一点scala方面的知识。很多人都说看kafka的源码不需要懂scala,但是其实根据我阅读下来,要是真的一点也不懂scala,还是挺难阅读的,所以要懂一些scala的基础知识,比如面向对象,函数编程等,不过要求不高。
kafka:
客户端:(java)
producer
consumer
服务端:(scala)
broker
三 Kafka的书可以推荐吗?
《Apache Kafka源码剖析》
《kafka技术内幕》
《深入理解Kafka 核心设计与实践原理》:讲源码但是没有大量贴源码,推荐这一本;
源码剖析方式
- 场景驱动的方式
比如我们分析生产者代码的时候,我们就先写一个生产者的代码,根据代码一步一步去分析。 - 画图分析,看源码的时候边分析,边画图
- 我们看到写得比较好的源码的时候,我们也去分析一下,里面的一些架构的技巧,代码编程技巧。
我会进行代码总结。
源码剖析的核心内容
- Producer生产数据的流程。
- Broker端:
2.1 broker如何接收数据(高并发)
2.2 数据写入(leader partition)
2.3 副本的数据同步(HW,LEO)
2.4 Kafka的集群管理(controller -》 Zookeeper) - consumer 消费数据