生产者(Producer)就是负责向kafka发送消息的应用程序。
拿图书馆举例的话,不同的出版社(生产者producer)把图书(消息message)发送给图书馆(kafka服务),然后所有人(消费者)可以去指定图书馆浏览图书(poll拉取消息),浏览图书信息自己进行下一步归类总结之类(消费消息定制操作)。
生产者对象构建时需要指定生产者连接kafka集群所需的至少一个broker地址,就是出版社发书需要指定发去新华书店,可以指定北京新华书店和南京新华书店,然后全国新华书店自己协调其他地区新华书店进行书籍派发。
然后还需指定key.serializer和value.serializer,对发送消息的key和value进行序列化,比如出版社发送了包含很多节课文(value)的语文书(key)和很多节课文(value)的数学书(key),同时和新华书店对接时为了方便传输采用了自定义的传输方式,比如1表示语文,2表示数学。对应在kafka传输中就是不同的序列化方式,将传输内容按照不同的方式转换成字节byte数组。
上面三个参数是发送必备的参数,除此之外还有很多参数,之后进行罗列。
producer连接上kafka之后,通过send方法发送消息,传入消息对象ProducerRecord即可发送,send方法可传入回调函数进行成功后的回调操作。实际上send方法返回的是一个Future<RecordMetadata>类型的结果,所以可以通过future的get方法实现阻塞等待返回结果的同步发送效果。但是通过调用future.get方法的话就需要自己去处理异常和返回值,需要额外包装一层异常捕获的代码,而且也需要自己去判定何时调用future