kafka 简单的demo

首先是安装kafka,请自行百度!

安装好后进入到bin目录 windows系统的话进入到bin/windows下,输入命令 kafka-server-start.bat …/config/server.properties 启动
然后配置springboot 工程,这里是springboot2.x
pom.xml里新增
在这里插入图片描述

application.yml 添加
在这里插入图片描述

//编写生产者类
public class KafkaProducer{

private static Logger logger = LoggerFactory.getLogger(KafkaProducer.class);

@Autowired
private KafkaTemplate kafkaTemplate;

/**
 * 发送消息
 * @param topic 主题
 * @param data 消息内容
 * */
public void send(String topic,Object data){
    try{
        //发送
        ListenableFuture<SendResult<String, Object>> future =  kafkaTemplate.send(topic,data);
        //发送回调
        future.addCallback(new ListenableFutureCallback<SendResult<String, Object>>() {
            @Override
            public void onFailure(Throwable throwable) {
                logger.error("fail in send by cause:"+ throwable.getMessage());
            }
            @Override
            public void onSuccess(SendResult<String, Object> stringObjectSendResult) {
                /**
                 * 此处可根据业务需要编写业务代码
                 * */
                logger.info("The message was sent successfully:"+ data);
            }
        });
    }catch (RuntimeException e){
        logger.error("exception in send by cause:"+ e.getMessage());
    }

}
}
//消费者类
public class KafkaConsumer {

private static Logger logger = LoggerFactory.getLogger(KafkaConsumer.class);

/**
 * 消费监听
 * */
@KafkaListener(topics=“test”)
public void listen(ConsumerRecord<String,String> record, Acknowledgment ack){
    String message = record.value();
    try {
        logger.info("recevie message:" + message);
        //提交offset
        ack.acknowledge();
      
    }catch (Exception e){

     }
}

}

最后在记录一下学习心得
分区: 分区是kafka的物理数据存储位置,topic是逻辑存储。创建一个topic,其实就是在每个分区都创建了相同的topic, 分区可在server.properties中设置 num.partitions=8 就是设置了8个分区,那么发送数据具体到那个分区呢?

默认的分区策略是:
如果在发消息的时候指定了分区,则消息投递到指定的分区
如果没有指定分区,但是消息的key不为空,则基于key的哈希值来选择一个分区
如果既没有指定分区,且消息的key也是空,则用轮询的方式选择一个分区

每个分区同时只能由相同用户组的中其中一个消费者来消费,如果是要配置多消费者,则需要配置多个消费组
如果同一用户组的不同消费者消费不同的分组,如果消费者与分区相同,那是最好不过了,如果消费者实例的数量大于分区数,那么按照默认的策略,有一些消费者是多余的,一直接不到消息而处于空闲状态。

副本: 副本就相当于备份,副本数量不能超过borker数量,。如果副本数与borker相同,则每个borker都会存在一个副本,以保证服务的可用性

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值