在这一节中将创建一个使用Java客户端发布和使用消息的应用程序。 Kafka生产者客户端由以下API组成。
KafkaProducer API
下面来了解Kafka生产者API。 KafkaProducer API的核心部分是KafkaProducer
类。 KafkaProducer
类提供了一个选项,用于将Kafka代理的构造函数与以下方法连接起来。
KafkaProducer
类提供send()
方法来异步发送消息到主题。send()
的签名如下 –producer.send(new ProducerRecord<byte[],byte[]>(topic, partition, key1, value1) , callback);
ProducerRecord
– 生产者管理等待发送的记录缓冲区。Callback
– 服务器确认记录时执行的用户提供的回调函数(null表示无回调)。KafkaProducer
类提供了一个flush
方法来确保所有先前发送的消息已经实际完成。flush
方法的语法如下 –public void flush()
KafkaProducer
类提供了partitionFor
方法,该方法有助于获取给定主题的分区元数据。 这可以用于自定义分区。 这种方法的签名如下 –public Map metrics()
它返回生产者维护的内部度量图。
public void close()
–KafkaProducer
类提供close
方法,阻塞直到完成所有先前发送的请求。
生产者API
Producer API的核心部分是Producer
类。 Producer
类提供了一个选项,通过以下方法在其构造函数中连接Kafka代理。
Producer类
Producer类提供send
方法,使用以下签名将消息发送到单个或多个主题。
public void send(KeyedMessaget<k,v> message) - sends the data to a single topic,par-titioned by key using either sync or async producer. public void send(List<KeyedMessage<k,v>>messages) - sends data to multiple topics. Properties prop = new Properties(); prop.put(producer.type,”async”) ProducerConfig config = new ProducerConfig(prop);
有两种类型的生产者 – 同步和异步。
同样的API配置也适用于Sync生产者。 它们之间的区别是同步生产者直接发送消息,但在后台发送消息。 当想要更高的吞吐量时,首选异步生产者。 在0.8
之前的版本中,异步生产者没有回调send()
来注册错误处理程序。异步生产者仅在当前版本0.9
中可用。
public void close()
Producer
类提供close()
方法来关闭所有Kafka 经纪人的生产者池连接。
配置设置
Producer API的主要配置设置在下表中列出以便更好地理解 –
编号 | 配置设置 | 描述 |
---|---|---|
1 | client.id |
确定生产者应用 |
2 | producer.type |
是同步还是异步? |
3 | acks |
acks 配置控制生产者请求下的标准被认为是完整的。 |
4 | retries |
如果生产者请求失败,则自动重试具有特定的值。 |
5 | bootstrap.servers |
引导经纪人(brokers )列表。 |
6 | linger.ms |
如果想减少请求的数量,可以将linger.ms 设置为大于某个值的值。 |
7 | key.serializer |
序列化器接口的键。 |
8 | value.serializer |
序列化器接口的值。 |