kafka生产消费四种模型说明

利用正交方式,来概括所有的生产消费模型,如下:

 单生产者P多生产者NP
单消费者CCPCNP
多消费者NCNCPNCNP

 在kafka中,生产和消费可以概括为如上四种模型,分别是

一、一个生产者,一个消费者

二、一个生产者,多个消费者

三、多个生产者,一个消费者

四、多个生产者,多个消费者

其中一个生产者,一个消费者,我们可以理解为单向数据传递,生产者将数据推送至队列中,消费者向队列中获取。

其实在这里还是要讲一个新的概念,广播和订阅。这是两种不同的模式。我们主要从消费者角度去解释,广播,其实就是生产者将数据推送至kafka,然后满足条件的消费者需要主动去获取。而订阅则不同,订阅是数据被推送到kafka后,kafka会将数据推给订阅的消费者。

从生产者角度而言,其实没有太多的变化,还是往指定的topic中写数据。这个也是从代码角度去出发的,因为生产者端的代码不需要改变。消费者则不同,需要消费多个生产者所生产的消息,如果是以多个窗口去获取,其实也没有什么差别,差别是需要在一个窗口下去获取多个topic的信息。

consumer = KafkaConsumer('temp',auto_offset_reset='earliest',bootstrap_servers='localhost:9092')

for msg in consumer:

         print(msg.value.decode())

kafka读取历史消息,有点像我们一直不停的从文件中读取消息,按照常规的逻辑来说,我们不停的读取文件中的数据,为了不重复读取数据,而且提升效率,我们会在文件中进行标记,标记我们上次读到了那个位置,然后下次打开的时候,就会直接从我们打开的地方获取。在这里感觉kafka也是这个逻辑,因为你不仅可以读取到最新的消息,也可以获取到历史消息。不过在这里,kafka可以有更好的逻辑去处理,就是使用队列,先进先出,这样数据只要在取用后就没有了,所以对于数据不需要做标记,直接取,按照逻辑来说,只要是可以取到的数据,就说明是原来没有被取用过的。

Python操作kafka消费多个topic的消息(订阅)

consumer = KafkaConsumer(bootstrap_servers=brokerlist) consumer.subscribe(topics=('test','test0'))

 for message in consumer:

        print(message.value.decode())

如果同时有多个生产者和多个消费者,从模型上看,这应该是最复杂的一种模型了,但其实梳理清楚就不会觉得复杂了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值