Kafka学习笔记-生产者(一)

一、生产者概览

尽管生产者API使用起来很简单,可是消息发送过程仍是有点儿复杂java

  • 咱们从建立一个ProducerRecord对象开始,
    • ProducerRecord对象须要包含目标主题和要发送的内容。
    • 咱们还能够指定键或分区。
    • 在发送ProducerRecord对象时,生产者须要先把键和值对象序列化成字节数组,这样他们才能在网络上传输。
  • 接下来数据传给分区器,
    • 若是以前在ProducerRecord对象里面指定了分区,那么分区器不会再作任何操做,直接把指定的分区返回。
    • 若是没有指定分区,那么分区器会根据ProducerRecord对象的键来选择一个分区。
    • 选好分区以后,生产者就知道网哪一个主题的哪一个分区发送这条记录了。
  • 批次记录与发送
    • 这条记录会被添加到一个记录批次里,这个批次里的全部消息会被发送到相同的主题和分区上。
    • 有一个独立的线程负责把这些记录批次发送到相应的broker上。
  • 服务器接收消息
    • 服务器在收到消息时会返回一个响应。
    • 若是消息写入成功。就会返回一个RecordMetaData对象,它包含了主题和分区信息,以及记录了分区里的偏移量。
    • 若是写入失败,则会返回一个错误,生产者在收到错误以后尝试从新发送消息。
    • 几回以后若是仍是失败,就返回错误信息。

二、建立Kafka生产者

  • kafka生产者有三个必要属性
    • bootStrap.servers:该属性指定了broker地址清单,地址格式为host:port。
      • 清单里不须要包含全部的broker地址,生产者会从给定的broker里查找其余的broker的信息
      • 不过建议至少提供两个broker信息,一旦其中一个宕机,生产者任然可以链接到集群上。
    • key.serializer :必须设置为一个实现了Serializer接口的类,生产者会使用这个类把键对象序列化为字节数组。
      • Kafka客户端默认提供了ByteArraySerializer,StringSerializer和InterSerializer。
      • 若是你只使用集中常见的java对象类型,那么就不必实现本身的序列化器。
      • 要注意,key.serializer是必须设置的,就算你打算只发送值的内容。
    • value.serializer:与key.serializer同样,value.serializer指定的类会将值序列化。
      • 若是键和值都是字符串,可使用与key.serializer同样的序列化器。
      • 若是键是整数类型而值是字符串,那么须要使用不一样的序列化器。

  • 建立一个生产者代码片断
    • 一、建立一个Properties对象
    • 二、由于咱们打算把键和值定义成字符串类型,因此使用的内置的StringSerializer
    • 三、在这里咱们建立了一个新的生产对象,并为键和值设置了恰当的类型,而后把Properties对象传给它。
  • 发送消息的方式
    • 发送并忘记(fire-and-forget)
      • 咱们把消息发送给服务器,但并不关心它是否正常到达。大多数状况下,消息会正常到达,由于kafka是高可用的,并且生产者会自动尝试重发。
      • 不过这种方式有时候也会丢失一些消息。
    • 同步发送
      • 咱们使用send()方法发送消息,它会返回一个Future对象。
      • 调用get方法进行等待,就能够知道是否发送成功。
    • 异步发送
      • 咱们调用send()方法,并制定一个回调函数,服务器在返回响应时调用该函数。
相关文章
相关标签/搜索