Kafka应用——自定义生产者与消费者
实验内容
在某一应用场景中,有两个消费者生产消息和一个消费者消费消息,他们利用Kafka集群进行消息传输。
其中生产者需要记录消息来源(即发送消息的主机名或IP)及消息发送时间(格式为年月日 时分秒),
生产者1同步发送消息、生产者2采用异步发送消息,都需要显示消息发送成功还是失败。
用户通过输入消息内容通过生产者(生产者1或生产者2)将消息发送到Kafka,消费者根据消息内容能区分消息来源。

实现思路
首先我们明确需要两个生产者,两个生产者唯一的区别就是同步发送和异步发送。
实现记录消息来源和发送时间的话,我们就需要用到拦截器,分别是时间拦截器和状态拦截器。
消费者的话只需要接收消息并打印出消息就可以了。
生产者1,同步发送
package hadoop.kafkademo;
import java.util.*;
import org.apache.kafka.clients.producer.*;
import org.apache.kafka.common.serialization.*;
/**
* @author zhz
* @date 2021/4/17 17:13
* 备注:生产者类,同步发送
*/
public class MyProducer
{
public static void main( String[] args ) throws Exception
{
// 使用Properties定义配置属性
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程序类
props.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());
// 设置拦截器链
List<String> interceptors=new ArrayList<String>();
// 添加拦截器TimeInterceptor(指定全路径)
interceptors.add("hadoop.kafkademo.TimeInterceptor");
// 添加拦截器CounterInterceptor(指定全路径)
interceptors.add("hadoop.kafkademo.CounterInterceptor");
// 将拦截器添加到配置属性中
props.put(ProducerConfig.INTERCEPTOR_CLASSES_CONFIG,interceptors);
// 定义消息生产者对象,依靠对象可以进行消息传输
Producer<String,String> producer=new KafkaProducer<String, String>(props);
Random rd=new Random();
// 循环发送消息
for(int i=0;i<10;i++)
{
/**
* 第一个参数:主题名称
* 第二歌参数:消息的key值
* 第三个参数:消息的value值
* 如果服务器返回错误,get()方法会抛出异常,如果没有错误,可以得到一个RecordMetadata对象,可以利用该对象获得消息的偏移量.
*/
try{
producer.send(new ProducerRecord<String, String>("topictest","hello kafka"+i,"i"))

最低0.47元/天 解锁文章
1192

被折叠的 条评论
为什么被折叠?



