Apache pulsar producer接口详解

producer.png

send(消息发送)

生产者以同步或者异步的方式将消息发送给broker,pulsar提供以下三种消息发送的接口:

  • sned
    每发送一条消息时,producer将会等待来自broker的对于这条消息的ack。如果producer没有收到该消息的ack,就会认为这条消息发送失败。
  • send async
    生产者将消息放到一个阻塞队列中后,无需等待立即返回。之后client在后台将阻塞队列中的消息发送给broker。如果该阻塞队列已满时,继续向该阻塞队列发送消息会抛出异常(PulsarClientException.ProducerQueueIsFullError)。阻塞队列的最大大小可以进行配置。
  • send timeout
    sendTimeout(int sendTimeout, TimeUnit unit)允许在发送的时候设置一个timeout,如果超过这个时间消息还没有被确认,将会抛出一个错误。
    注意:如果我们将timeout的时间设置为 0,例如: setTimeout(0,TimeUnit.SECONDS) ,意味着timeout的时间是无限大。默认时间是:30s。这个在删除pulsar中重复数据的时候有很好的应用场景,因为这个时候client端处于永远重试发送消息的状态,没有错误会返回给应用程序。

close

关闭一个producer,提供以下两种方式:

  • close
  • close async

intercept

拦截器接口主要提供以下三个方法:

  • close
    关闭interceptor,主要用于执行一些资源清理工作

  • before send
    用户可以在该方法中对消息做任何操作,但最好保证不要修改消息所属的topic和分区,否则会影响目标分区的计算

  • on send ack
    该方法会在消息被应答之前或消息发送失败时调用,并且通常都是在producer回调逻辑触发之前。onAcknowledgement运行在producer的IO线程中,因此不要在该方法中放入很重的逻辑,否则会拖慢producer的消息发送效率

compression

为了降低网络带宽,消息发送的时候,会对消息进行压缩,pulsar提供了如下三种消息压缩的方式:

  • NONE
  • LZ4
  • ZLIB
  • ZSTD

scheme

  • java string hash
  • murmur3_32hash

producer name

给生产者指定一个名字,如果没有手动指定,系统将会为该producer生成一个全局唯一的名字。
注意:在指定名称时,用户需要确保对于给定的topic,生产者名称在所有Pulsar的集群中是唯一的。 broker将强制执行只有一个给定名称的producer可以在topic上进行publish。

crypto

crypto key reader
  • get public key
  • get private key
add encryption key

添加producer用来加密数据密钥的public key.
当producer创建时,Pulsar客户端会检查是否有密钥添加到encryptionKeys中。 如果找到要添加的key,则针对每个key调用回调函数getKey(String keyName)来获取key的值。 应用程序应实现这个回调并返回pkcs8格式的密钥。 如果启用了压缩功能,则压缩后会对消息进行加密。 如果启用了批处理消息传递,则批处理消息也将被加密。

crypto failure action
  • FAIL

    如果加密操作失败,FAIL是失败时,发送的默认选项

  • SEND

    忽略加密失败并继续发送未加密的消息

flush

  • flush
  • flush async

topic

指定该producer将要把消息publish到哪一个topic

other option

block if queue full

当输出(outgoing)队列已满时,是否停止相应的操作

max pending msg

设置包含待处理消息的队列的最大大小,以便从broker接收确认。
当队列已满时,默认的,所有的调用都会失败,除非blockIfQueueFull设置为true。可以使用blockIfQueueFull来改变这个行为。

max pending msg across partitions

设置所有分区中的最大挂起消息数,此设置将用于降低每个分区的最大挂起消息

initial sequenceId

为producer生产的消息设置最开始的sequenceID,如果没有额外指定,那么接下来生产的第一条消息的sequenceID就是initialSequenceId + 1,第二条消息的sequenceID依次递增。

clone

基于当前的producer,copy一个producer出来。比如我们需要创建多个producer,并且这些producer有一些相同的属性可以复用,那么我们就可以基于这些相同的属性进行copy,然后对copy后的producer在做定制化的配置

get last sequenceID

获取producer publish的最后一个sequenceID。
如果系统中有两个名字一样的producer(原则上,这是不被允许的),该函数将返回在上一个producer发布的最后一条消息的sequenceID,如果没有消息被publish,则返回-1。

msg routing mode

  • single partition
  • round robin partition
  • custom partition

batch

  • max messages
  • max publish delay
  • enable batch
    是否启用batch的功能,启用batch功能之后,producer会累计到batch指定的大小进行flush,当然我们也可以提前触发flush操作,这个时候不管batch中有多少数据都会flush下去,同时清空batch。

property

  • property
    设置单个属性
  • properties
    设置多个属性,可以包装到map中

auto update partitions

你可能感兴趣的:(Apache pulsar producer接口详解)