本帖最后由 xingoo 于 2017-6-11 12:04 编辑
问题导读:
1 Producer是如何把数据写入broker的?
2 Producer在使用中都需要注意哪些问题?
虽然producer的API使用起来很简单,但是底层Kafka还是做了很多事情的。在图3-1中可以看到向kafka发送数据的主要步骤。
图3-1 Kafka Producer组件中的高级API流程图
最开始,我们需要构造ProducerRecord,它必须包含想要存储的topic以及想要发送的数据,另外,也可以直接指定特殊的key或者分区。当发送ProducerRecord时,producer作的第一件事情就是把key和value序列化成字符数组ByteArrays,从而通过网络传输。
然后,数据进入分区器。如果ProducerRecord指定了分区,那么分区器什么也不会做,直接返回指定的分区号。如果没有设置分区,那么通常会基于ProducerRecord的key分配分区。一旦选择好了分区,producer就知道数据该进入哪一个topic哪一个分区。然后会把数据保存在一个记录集里,这个记录集保存了相同topic以及分区的数据。另外一个独立的线程将会负责把记录集发送到对应的broker。
当broker收到消息时,会返回响应信息。如果消息成功写入kafka,将会返回主题的RecordMetadata对象,这个对象里面包含了分区的信息以及记录在分区中的offset。如果broker写入失败,将会返回错误。如果producer接收到错误,它将会尝试几次重新发送数据。
在本章中,我们将会学习到如何使用Kafka Producer,在这个过程中需要时常回顾一下图3-1中的流程。后续将会讲解:如何创建KafkaProducer以及ProducerRecord对象,如何使用默认的分区器和序列化,如何处理Kafka Producer返回的错误,如何自定义序列化以及分区器规则,同时也会回顾很多prodcuer相关的配置。
|