Kafka应用——自定义生产者与消费者

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"))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值