本文主要讲解如何使用Kafka的API开发Kafka的生产者程序。简单的说明如下:
- Kafka版本:1.1.1
生产者中常见的操作
- 选择序列化器
- 自定义分区器,默认的分区器是根据key进行散列,一旦partition的数量发生变化,那么同一个key对应的分区就会发生变化
一些常见的类或接口说明:
- java.util.Properties:该类是一个Hashtable的子类,用来维护Kafka生产者的配置信息
- org.apache.kafka.clients.producer.ProducerConfig:Kafka中加载配置信息的类
- org.apache.kafka.clients.producer.Producer:Kafka中的生产者接口类
- org.apache.kafka.clients.producer.KafkaProducer:是接口Producer的实现类
- org.apache.kafka.clients.producer.ProducerRecord:消息的包装类,发往kafka集群
- org.apache.kafka.clients.producer.RecordMetadata:Kafka集群中的分区接收到消息后,会往生产者会送一个响应,这个响应就是一个RecordMetadata的示例,包含了消息的topic,partition和offset等信息
代码示例:
package producer;
import org.apache.kafka.clients.producer.*;
import java.util.Properties;
import java.util.concurrent.Future;
public class MyProducer {
private static Properties kafkaProps = new Properties();
/**
* 初始化一些配置信息
*/
public void initProperty(){
kafkaProps.put("bootstrap.servers", "localhost:9092");
kafkaProps.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
kafkaProps.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
kafkaProps.put("retries", 3);
kafkaProps.put("acks", "all");
kafkaProps.put("client.id", "zhangsy");
}
/**
* 加载配置信息,生成一个生产者实例
* @param props
* @return
*/
public Producer getProducer(Properties props){
if (props == null || props.size() == 0)
throw new IllegalArg