Kafka Java API
Kafka是一个基于ZooKeeper的高吞吐量低延迟的分布式的发布与订阅消息系统
Kafka提供了Java客户端API进行消息的创建与接收。
依赖:
<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>2.0.0</version> </dependency>
创建生产者:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | public class MyProducer2 { public static void main(String[] args) { //1. 使用properties定义kafka环境属性 Properties props = new Properties(); //设置生产者 broker服务器连接地址 props.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "centos01:9092,centos02:9092,centos03:9092" ); //设置序列化key程序类 props.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer. class .getName()); //设置序列化value程序类,此处不一定非得是Integer,也可以是String props.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, IntegerSerializer. class .getName()); //2. 定义消息生产者对象,依靠此对象可以进行消息的传递 Producer<String, Integer> producer = new KafkaProducer<String, Integer>(props); //3. 循环发送10条消息 for ( int i = 0 ; i < 10 ; i++) { //发送消息,第一个参数为主题名称,第二个参数为消息的key值,第三个参数为消息的value值 //此方式只负责发送消息,不知道是否发送成功 // producer.send(new ProducerRecord<String, Integer>("topictest", "hello kafka " + i, i)); //同步方式发送消息 //使用生产者对象的send()方法发送消息,会返回一个Future对象,然后调用Future对象的get()方法进行等待,就可以知道消息是否发送成功。如果服务器返回错误,get()方法会抛出异常。如果没有发生错误,我们会得到一个RecordMetadata对象,可以用它获取消息的偏移量。最简单的同步发送消息的代码如下: /*try { producer.send(new ProducerRecord<String, Integer>("topictest", "hello kafka " + i, i)).get(); } catch (Exception e) { e.printStackTrace(); }*/ //异步方式发送消息,可以指定一个回调函数,服务器返回响应时会调用该函数。我们可以在该函数中对一些异常信息进行处理,比如记录错误日志或者把消息写入“错误消息”文件以便日后分析。 producer.send( new ProducerRecord<String, Integer>( "topictest" , "hello kafka " + i, i), new Callback() { public void onCompletion(RecordMetadata recordMetadata, Exception e) { System.out.println(recordMetadata.toString()); if (e != null ) { e.printStackTrace(); } } }); } //4.关闭生产者 producer.close(); } } |
创建消费者:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | public class MyConsumer { public static void main(String[] args) { //1. 使用Properties定义配置属性 Properties props = new Properties(); //设置消费者 Broker服务器的连接地址 props.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "centos01:9092,centos02:9092,centos03:9092" ); //设置反序列化key的程序类,与生产者对应 props.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer. class .getName()); //设置反序列化value的程序类,与生产者对应 props.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, IntegerDeserializer. class .getName()); //设置消费者组ID,即组名称,值可自定义。组名称相同的消费者进程属于同一个消费者组。 props.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "groupid-1" ); //2. 定义消费者对象 Consumer<String, Integer> consumer = new KafkaConsumer<String, Integer>(props); //3. 设置消费者读取的主题名称,可以设置多个 consumer.subscribe(Arrays.asList( "topictest" )); //4. 不停的读取消息 while ( true ) { //拉取消息,并设置超时时间为10秒 ConsumerRecords<String, Integer> records = consumer.poll(Duration.ofSeconds( 10 )); for (ConsumerRecord<String, Integer> record : records) { //打印消息关键信息 System.out.println( "key:" + record.key() + ",value:" + record.value() + ",partition:" + record.partition() + ",offset:" + record.offset()); } } } } |
书籍:Hadoop大数据技术开发实战 11.9 Java API操作
https://gitee.com/caoyeoo0/xc-springboot/blob/kafka/src/main/java/com/xc/xcspringboot/test/MyProducer2.java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!