Kafka简单客户端编程实例

今天,我们给大家带来一篇如何利用Kafka的API进行客户端编程的文章,这篇文章很简单,就是利用Kafka的API创建一个生产者和消费者,生产者不断向Kafka写入消息,消费者则不断消费Kafka的消息。下面是具体的实例代码。

一、创建配置类Config

这个类很简单,只是存放了两个常量,一个是话题TOPIC,一个是线程数THREADS

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.lya.kafka;
  
/**
  * 配置项
  * @author liuyazhuang
  *
  */
public class Config {
   
  /**
   * 话题
   */
  public static final String TOPIC = "wordcount" ;
  /**
   * 线程数
   */
  public static final Integer THREADS = 1 ;
}

二、编程生产者类ProducerDemo

这个类的主要作用就是向Kafka写入相应的消息,并且将消息写入wordcount话题。

?
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
package com.lya.kafka;
  
import java.util.Properties;
  
import kafka.javaapi.producer.Producer;
import kafka.producer.KeyedMessage;
import kafka.producer.ProducerConfig;
  
/**
  * 生产者实例
  * @author liuyazhuang
  *
  */
public class ProducerDemo {
  public static void main(String[] args) throws Exception {
   Properties props = new Properties();
   props.put( "zk.connect" , "192.168.209.121:2181" );
   props.put( "metadata.broker.list" , "192.168.209.121:9092" );
   props.put( "serializer.class" , "kafka.serializer.StringEncoder" );
   props.put( "zk.connectiontimeout.ms" , "15000" );
   ProducerConfig config = new ProducerConfig(props);
   Producer<String, String> producer = new Producer<String, String>(config);
  
   // 发送业务消息
   // 读取文件 读取内存数据库 读socket端口
   for ( int i = 1 ; i <= 100 ; i++) {
    Thread.sleep( 500 );
    producer.send( new KeyedMessage<String, String>(Config.TOPIC,
      "this number ===>>> " + i));
   }
  
  }
}

三、编写消息者类ConsumerDemo

这个类的主要作用就是消费Kafka中wordcount话题的消息。

?
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
45
46
47
48
49
50
51
package com.lya.kafka;
  
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
  
import kafka.consumer.Consumer;
import kafka.consumer.ConsumerConfig;
import kafka.consumer.KafkaStream;
import kafka.javaapi.consumer.ConsumerConnector;
import kafka.message.MessageAndMetadata;
  
/**
  * 消费者实例
  * @author liuyazhuang
  *
  */
public class ConsumerDemo {
   
  
  public static void main(String[] args) {
    
   Properties props = new Properties();
   props.put( "zookeeper.connect" , "192.168.209.121:2181" );
   props.put( "group.id" , "1111" );
   props.put( "auto.offset.reset" , "smallest" );
   props.put( "zk.connectiontimeout.ms" , "15000" );
  
   ConsumerConfig config = new ConsumerConfig(props);
   ConsumerConnector consumer =Consumer.createJavaConsumerConnector(config);
   Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
   topicCountMap.put(Config.TOPIC, Config.THREADS);
   Map<String, List<KafkaStream< byte [], byte []>>> consumerMap = consumer.createMessageStreams(topicCountMap);
   List<KafkaStream< byte [], byte []>> streams = consumerMap.get(Config.TOPIC);
    
   for ( final KafkaStream< byte [], byte []> kafkaStream : streams){
    new Thread( new Runnable() {
     @Override
     public void run() {
      for (MessageAndMetadata< byte [], byte []> mm : kafkaStream){
       String msg = new String(mm.message());
       System.out.println(msg);
      }
     }
     
    }).start();
    
   }
  }
}

四、运行实例

首先,运行消费者类ConsumerDemo
运行结果如下:

没有打印任何信息。
此时,我们运行生产者类ProducerDemo
我们再次打开消费者的控制台查看如下:

打印出了生产者生产的消息。
至此,Kafka简单客户端编程实例结束。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值