kafka版本:0.10.1.0
将kafka源码下载下来导入idea后都会看到一个example包,这个包里面有生产者和消费者的例子,教我们如何使用,个人认为这里面的例子是我们学习源码最好的入口。
在初始化生产者之前会设置一些配置,包括kafka地址,key、value序列化器等,当然上面例子中的配置在我们实际使用时是远远不够的,后面在分析过程中会整理一些针对kafka调优的参数。
个人习惯在核心代码上面加一个todo,并注明这段代码的目的。new KafkaProducer<>(props); 点进去
点进去可以看到KafkaProducer提供了多种构造方法,也可以自定义序列化器,一般我们使用kafka的key、value序列化器即可,这里面只传进去了我们自定义的配置。继续点进去。
这里面比较重要的是,设置分区器和设置重试时间,我们知道kafka的一个topic可以有多个分区,那么发送消息的时候具体发送到哪个分区中也是有一定策略的,后面会深入讲解。并且kafka也支持消息重试,retry.backoff.ms 表示每次重试的时间间隔。
读到这里我们发现很多参数在example包里面的例子中都是没有设置的,如果我们没有设置,就会走默认的配置,那么这些默认配置不一定符合我们实际生产中的需求,这就是一些调优项,当然也是根据不同场景来修改的。
这段代码初始化了三大重要组件:
1、RecordAccumulator 对象,kafka发送数据实际上也是批量发送的,这个对象是保证kafka高吞吐的重要设计
2、NetworkClient 管理网络的重要组件
3、Sender 线程,也是真正发送数据的线程
至此,生产者就初始化好了,但是目前为止只是粗略的过了一下流程,后面进行细节分析~