1:安装Zookeep
2:下载kafka
3:启动Zookeep
4:进入解压/bin目录下kafaka-server-start ../../config/server.properties
5:如远程连接请在server.properties,
36 行加入advertised.host.name=本机ip(ipconfig||ifconfig获得的地址)。
6:在POM引入依赖
<dependencies> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>0.11.0.0</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.9</version> </dependency> </dependencies>
6:生产者
package XXXXXXX; import java.util.Properties; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.Producer; import org.apache.kafka.clients.producer.ProducerRecord; public class ProducerMain { public static void main(String[] args) throws Exception { // 配置信息 Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); // 设置数据key的序列化处理类 props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); // 设置数据value的序列化处理类 props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); // 创建生产者实例 Producer<String, String> producer = new KafkaProducer<String, String>(props); // 创建一条新的记录,第一个参数为Topic名称 ProducerRecord record = new ProducerRecord<String, String>("my-topic", "userName", "Angus"); // 发送记录 producer.send(record); producer.close(); } }
7:消费者A
package xxxxxx; import java.util.Arrays; import java.util.Properties; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.KafkaConsumer; public class ConsumerMain { public static void main(String[] args) { // 配置信息 Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); // 必须指定消费者组 props.put("group.id", "test4"); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props); // 订阅 my-topic 的消息 consumer.subscribe(Arrays.asList("my-topic")); // 到服务器中读取记录 while (true) { ConsumerRecords<String, String> records = consumer.poll(100); for (ConsumerRecord<String, String> record : records) { System.out.println("这是消费者A,key: " + record.key() + ", value: " + record.value()); } } } }
8: 消费者B
package xxxxxx; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Properties; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.KafkaConsumer; /** * 消费者 * */ public class ConsumerMainB { public static void main(String[] args) { // 配置信息 Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); // 指定了不同的消费者组,消息会被广播到所有的消费者实例 props.put("group.id", "test3"); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props); // 订阅 my-topic 的消息 consumer.subscribe(Arrays.asList("my-topic")); // 到服务器中读取记录 while (true) { ConsumerRecords<String, String> records = consumer.poll(100); for (ConsumerRecord<String, String> record : records) { System.out.println("这是消费者B,key: " + record.key() + ", value: " + record.value()); } } } }