Kafka Producer

一、Kafka Producer发送消息基本流程
1、首先,我们需要创建一个ProducerRecord,这个对象需要包含消息的主题(topic)和值(value),可以选择性
指定一个键值(key)或者分区(partition)
2、发送消息时,生产者会对键值和值序列化成字节数组,然后发送到分配器(partitioner)
3、如果我们指定了分区,那么分配器返回该分区即可;否则,分配器将会基于键值来选择一个分区并返回。
4、选择完分区后,生产者知道了消息所属的主题和分区,它将这条记录添加到相同主题和分区的批量消息中,另一个
线程负责发送这些批量消息到对应的Kafka broker
5、当broker接收到消息后,如果成功写入则返回一个包含消息的主题、分区及位移的RecordMetadata对象,否则返回异常
6、生产者接收到结果后,对于异常可能会进行重试

二、Kafka Producer生产者基本属性配置(生产者发送消息必须要配置这几个属性)
1、bootstrap.servers:属性值是一个host:port的broker列表。这个属性指定了生成者建立初始连接的broker列表,这个列表
不需要包含所有的broker,因为生产者建立了初始连接后会从相应的broker获取到集群信息。但建议指定至少包含两个broker,
这样一个broker宕机后生产者可以连接到另一个broker。
2、key.serializer:属性值是类的名称。这个属性指定了用来序列化键值(key)的类。Kafka broker只接收字节数组,但生产者的
发送消息接口允许发送任何的Java对象,因此需要将这些对象序列化成字节数组。key.serializer指定的类需要实现org.apache.
kafka.common.serialization.Serializer接口。
3、value.serializer:属性值是类的名称。这个属性指定了用来序列化消息记录的类,与key.serializer差不多

三、Kafka Producer发送消息的方式
1、只发不管结果(fire-and-forget):只调用接口发送消息到Kafka服务器,但不管成功写入与否。由于Kafka是高可用,因此大部分
情况下消息都会写入,但在异常情况下会丢失信息。----效率最高
2、同步发送(Synchronous send):调用send()方法返回一个Future对象,我们可以使用它的get()方法来判断消息发送成功与否。
–效率最慢
3、异步发送(Asynchronous send):调用send()时提供一个回调方法,当接收到broker结果后回调此方法。–介于1与2之间

四、Kafka Producer生产者其他属性配置
1、acks:acks控制多少个副本必须写入消息后生产者才能认为写入成功
2、 buffer.memory:设置生产者缓存发送的消息的内存大小
3、compresstion.type:指定使用消息压缩,参数可以取值为snappy、gzip或者lz4
4、retries:消息发布异常时,可以重试的次数
5、batch.size:当多条消息发送到一个分区时,生产者会进行批量发送,他指定了批量消息的大小上限
6、linger.ms:指定生产者在发送批量消息前等待的时间
7、client.id:它是broker用来识别消息是来自哪个客户端的
8、max.request.size:限制生产者发送数据包的大小

五、Kafka Producer消息分区
1、Kafka Producer发送的消息(message)主要包含topic、key、value,其中key是决定消息发送到哪个分区的
2、如图:key是怎么决定消息发送到哪个分区

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值