今天,我们给大家带来一篇如何利用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
new
Producer
// 发送业务消息
// 读取文件 读取内存数据库 读socket端口
for
(
int
i =
1
; i <=
100
; i++) {
Thread.sleep(
500
);
producer.send(
new
KeyedMessage
"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
new
HashMap
topicCountMap.put(Config.TOPIC, Config.THREADS);
Map
List
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简单客户端编程实例结束。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。