Kafka客户端开发
- pom依赖
这里写链接内容
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.11</artifactId>
<version>0.10.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.10.2.0</version>
</dependency>
- producer—>生产者
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import java.util.Properties;
import java.util.UUID;
public class ProduceApp {
public static void main(String[] args) throws Exception{
Properties props = new Properties();
props.setProperty("bootstrap.servers", "spark1:9092,spark2:9092,spark3:9092");
props.setProperty("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.setProperty("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
/**
* 消息存储是是否需要应答
* acks: [1 - leader 应答
* ,0,-1 无应答
* all follower -> leader 应答
*/
props.setProperty("acks", "1");
KafkaProducer<String, String> kafkaProducer = new KafkaProducer<String, String>(props);
int i = 0;
while (true) {
ProducerRecord<String, String> record = new ProducerRecord<String, String>("MyTopic", UUID.randomUUID().toString(), "hello kafka " + i);
kafkaProducer.send(record);
Thread.sleep(500);
System.out.println(i);
i ++;
}
}
}
- consumer—>消费者
import org.apache.kafka.clients.consumer.ConsumerRecord
import org.apache.kafka.clients.consumer.ConsumerRecords
import org.apache.kafka.clients.consumer.KafkaConsumer
import java.util.Arrays
import java.util.Iterator
import java.util.Properties
public class ConsumerApp {
public static void main(String[] args) {
Properties props = new Properties()
// 新api的配置
props.setProperty("bootstrap.servers", "spark1:9092,spark2:9092,spark3:9092")
//用于建立到Kafka集群的初始连接的主机/端口对列表。 该列表仅影响用于发现全套服务器的初始主机。
// 这个清单应该在表格中host1:port1,host2:port2,...。由于这些服务器仅用于初始连接以发现完整的群集成员资格
// (可能会动态更改),因此此列表不必包含整套服务器(但可能需要多个服务器,以防服务器关闭) 。
props.setProperty("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
props.setProperty("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
props.setProperty("group.id","jinjiaxin")
//标识此消费者所属的消费者群组的唯一字符串。
props.setProperty("auto.offset.reset","earliest")
KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props)
consumer.subscribe(Arrays.asList("MyTopic"))
while (true) {
ConsumerRecords<String, String> consumerRecords = consumer.poll(3000)
Iterator<ConsumerRecord<String, String>> iterator = consumerRecords.iterator()
while (iterator.hasNext()) {
ConsumerRecord<String, String> record = iterator.next()
System.out.println("record = " + record.toString())
}
}
}
}