记一次kafka消息实际操作记录

消息结构(生产者微服务+消费者微服务)

kafka的消息实现由Producer生产消息,Consumer消费消息构成。

生产者流程

Producer生产消息采用推(push)模式发布到Broker(kafka服务器),每条消息都被追加(append)到Partition(分区)中,属于顺序写磁盘(顺序写磁盘效率比随机写内存要高,保障kafka吞吐率)。

producer写入消息流程如下

Z67PIS.png

消费者流程

Consumer采用拉(pull)模式,由消费者自己记录消费状态,每个消费者互相独立地顺序读取每个分区的消息。消费者通过控制偏移量(offset)可以任意的顺序消费消息。比如,消费者可以重置到旧的偏移量,重新处理之前已经消费过的消息;或者直接跳到最近的位置,从当前的时刻开始消费。

消息消费不会立即删除

在某些消息系统中,消息被消费后立即删除。而Kafka的做法是生产者发布的所有消息会一致保存在Kafka集群中,不管消息有没有被消费。用户可以通过设置保留时间来清理过期的数据,比如,设置保留策略为两天。那么,在消息发布之后,它可以被不同的消费者消费,在两天之后,过期的消息就会自动清理掉。

具体实现步骤

  • 需求:在实际中一条batch消息需要分发非常多的人,原始通过数据库去操作读写量太大,效率也低下。而通过消息队列去实现还可以省去并发(kafka服务的吞吐量完全足够);
  • 生产者:通过Schedule定时解析batch中需要分发每条消息(实现1->多)推送到kafka服务,记录batch推送状态
  • 消费者:通过KafkaListener拉取kafka服务中的消息(实现多->多),数据量大的时候多个消费者分流。记录消息消费状态
  • 重发:对于batch推送失败的进行重发kafka,对于消息消费失败的进行重发kafka。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值