kafka学习笔记

消息队列(message,queue)MQ:

  1. 解耦合。(无系统的侵入性)
  2. 提高系统的响应时间

分类:

点对点的。

消息生产者发布到queue中之后,然后消息消费者从queue中取出,并且消费消息

缺点:

消息被消费之后,queue中就不再存储,所以消息消费者不可能消费到已经被消费的消息。

queue支持多个消费者,但是对于一个消息而言,只会有一个消费者可以消费。不能再次消费

发布/订阅
producter把消息发布到queue的topic中,同时有多个cunsumer消费。topic 是来管理一组消息的机构


消息队列比较:

RabbitMQ:支持的协议多,非常重量级消息队列,对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。

ZeroMQ:号称最快的消息队列系统,尤其针对大吞吐量的需求场景,擅长的高级/复杂的队列,但是技术也复杂,并且只提供非持久

性的队列。

ActiveMQ:Apache下的一个子项,类似ZeroMQ,能够以代理人和点对点的技术实现队列 。JMS

Redis:是一个key-Value的NOSql数据库,但也支持MQ功能,数据量较小,性能优于RabbitMQ,数据超过10K就慢的无法忍受。

kafka:kafka(可作为实时内存技术的大数据的缓冲地带),不仅仅把消息放在不同topic中,而且把消息进行partition,可并行

处理,每个partition,对于consumer group中的 每个consumer。每个topic对应每个consumer group

kafka 是分布式发布-订阅的消息系统。 消息发布到mq中的topic,topic 允许n个consumer消费

持久化的方式是日志的方式;主要用于处理活跃的流式数据(实时性的)

同时为发布和订阅提供高吞吐量。据了解,Kafka 每秒可以生产约 25 万消息(50 MB),每秒处理 55 万消息(110 MB)。

可进行持久化操作。将消息持久化到磁盘,因此可用于批量消费,例如 ETL,以及实时应用程序。通过将数据持久化到硬盘以及 

replication 防止数据丢失。分布式系统,易于向外扩展。所有的 producer、broker 和 consumer 都会有多个,均为分布式的。

无需停机即可扩展机器。

消息被处理的状态是在 consumer 端维护,而不是由 server 端维护。当失败时能自动平衡。支持 online 和 offline 的场景。


名词:

  •   Producer 特指消息的生产者
  •   Consumer 特指消息的消费者
  •   Consumer Group 消费者组,可以并行消费Topic中partition的消息
  •   Broker:缓存代理,Kafa 集群中的一台或多台服务器统称为 broker。
  •   Topic:特指 Kafka 处理的消息源(feeds of messages)的不同分类。
  •   Partition:Topic 物理上的分组,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列。partition 中的每条消息都会被分配一个有序的 id(offset)。
  •   Message:消息,是通信的基本单位,每个 producer 可以向一个 topic(主题)发布一些消息。
  •   Producers:消息和数据生产者,向 Kafka 的一个 topic 发布消息的过程叫做 producers。
  •   Consumers:消息和数据消费者,订阅 topics 并处理其发布的消息的过程叫做 consumers。

问答:

kafka的partition 日志文件,里面保持哪些内容?

  • offset 对应类型:long
  • MessageSize 对应类型:int32
  • data 是message的具体内容


kafka 怎么快速定位到 consumer没有消费过的信息?比如consumer挂了?

这个问题,使用zk来解决的

kafka  为什么能保证访问速度?

kafka存储过程: 每个topic的每个partition对应一个日志文件,数据在日志文件中,采用追加的方式去存储,然而这种有序的线

性访问磁盘,很多时候会比随机访问内存快。。同时对每一个partition进行segement(分段),每一个partition 对应一个index.

文件。

写:把数据追加到日志文件中,读:从文件中读。。。

读写操作 不会堵塞(追加,有序),线性访问磁盘。


kafka  怎么快速定位没有被消费的消息

采用一种非全文检索(full text)的索引方式(full text的索引文件太大,占用过多的磁盘),从而采用稀疏存储:每隔一定字

节的数据建立一条索引。每个partition对应一个index文件,如果没有命中索引,那么找id 之前的数据。(类似二分查找)

kafka consumer怎么知道需要去获取消息

producer  push消息到kafka的时候,同时被zookeeper watcher到,consumer 去pull  message,pull完之后通知zookeeper,记录该信息


zookeeper 在kafka中的工作

  • 协调分布式的主从结构
  • 协调producer、consumer的之间的服务
  • 负载均衡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值