kafka的JAVA API操作
maven需要添加以下jar包依赖:
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients -->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
Producer的代码:
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import java.util.Properties;
/**
* 向test这个topic里面发送数据
*/
public class MyProducer {
public static void main(String[] args) {
Properties props = new Properties();
//指定kafka的服务器的地址
props.put("bootstrap.servers", "node01:9092,node02:9092,node03:9092");
//消息的确认机制
props.put("acks", "all");
//重试机制
props.put("retries", 0);
//批量发送的大小
props.put("batch.size", 16384);
//消息的延迟
props.put("linger.ms", 1);
//消息缓冲区的大小
props.put("buffer.memory", 33554432);
//定义key和value的序列化
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("partitioner.class","cn.itcast.kafka.demo1.MyPartitioner");
KafkaProducer<String, String> producer = new KafkaProducer<>(props);
for(int i = 0;i<100;i++){
//第一种分区策略,既没有指定数据key,也没有指定分区号,直接使用轮询的方式进行数据分区策略
ProducerRecord<String, String> producerRecord = new ProducerRecord<>("test", "这是第" + i + "条message");
//第二种:指定数据key,通过key.hashCode来决定数据的分区 一定要注意,数据的key,需要进行变化
ProducerRecord<String, String> producerRecord = new ProducerRecord<>("test", "这是第" + i + "条message");
//第三种:指定了数据key,也指定了分区号,直接将数据发送到对应的分区里面去
ProducerRecord<String, String> producerRecord = new ProducerRecord<>("test", 1,"mykey"+i,"这是第" + i + "条message");
//自定义分区策略,不需要指定分