MQ
2020-01-15 14:25:09 2 举报
AI智能生成
关于Mq的一些知识点
作者其他创作
大纲/内容
RocketMq
角色介绍
1.Producer:发送者
2.Consumer:消息接收者
3.Broker:消息暂存和传输
4.NameServer:管理Broker
5.Topic:区分消息的种类:一个发送者可以发送消息
给一个或多个Topic,一个消息接送则可以订阅一个或
多个topic
给一个或多个Topic,一个消息接送则可以订阅一个或
多个topic
6.Message Queue:相当于Topic的分区,用于并行发送和接消息
kafka
核心api
Producer Api(生成者Api)
Consumer Api(消费者Api)
Streams Api(流式api)
Connector APi(连接api)
主题分区
可以通过Topic命令来查看每个服务下面有
多少个主题,每个主题都是会在指定的文件路径
下面产生日志文件。(所以为什么说kafka是将文件
存储在磁盘上面的)
多少个主题,每个主题都是会在指定的文件路径
下面产生日志文件。(所以为什么说kafka是将文件
存储在磁盘上面的)
命名方式就是 topic的名字-(分区序号)分区序号从0开始最大为50
1. 每个分区都是一个有序,不可变的分区,后续新来的消息会源源不断地追加到分区的后面
,这相当于一种结构话的提交rz
,这相当于一种结构话的提交rz
2. 分区中的每一条消息都会被分配一个连续的Id值(offset),该值用于
唯一标识分区中的每一条消息
唯一标识分区中的每一条消息
3. 分区中的消息数据是存储在日志文件中的
而且同一分区中的消息数据是按照发送顺序严格有序的。分区在逻辑上对应一个日志
当生产则将消息写入分区是,实际上是写到了分区所对应的日志当中,而日志可以看做一种逻辑
上面的概念,对应磁盘上面的一个目录。一个日志文件由多个Segment(段来构成)。每个Segment
对应一个索引文件与日志文件
而且同一分区中的消息数据是按照发送顺序严格有序的。分区在逻辑上对应一个日志
当生产则将消息写入分区是,实际上是写到了分区所对应的日志当中,而日志可以看做一种逻辑
上面的概念,对应磁盘上面的一个目录。一个日志文件由多个Segment(段来构成)。每个Segment
对应一个索引文件与日志文件
5. 分区还可以实现并行处理的能力, 向一个主题所发送的消息会发送给该
主题所拥有的不同的分区中,这个消息就可以实现并行发送预处理,由多个分区来
接收所发送的消息
主题所拥有的不同的分区中,这个消息就可以实现并行发送预处理,由多个分区来
接收所发送的消息
4. 借助于分区 我们可以实现kafka的水平扩展,对于一台机器来说
无论是物理机还是虚拟机,其运行能力总有上线。我们可以通过分区将一个主题的
消息分散到不同的Kafka Server上。在新的机器上面建立新的分区,这样理论就可以实现
无线的水平扩展能力
无论是物理机还是虚拟机,其运行能力总有上线。我们可以通过分区将一个主题的
消息分散到不同的Kafka Server上。在新的机器上面建立新的分区,这样理论就可以实现
无线的水平扩展能力
Segment(段)
一个分区是有一系列有序,不可变的消息所构成的
当一个分区(partition)的消息数量增长到一定程度之后
消息文件会进行切割,新的消息会被写到一个新的文件中
一个个新的文件我们就叫做段。所以一个Partition在物理上面是由
一个或者多个Segment构成的,每个Segment保存了真实的数据消息
当一个分区(partition)的消息数量增长到一定程度之后
消息文件会进行切割,新的消息会被写到一个新的文件中
一个个新的文件我们就叫做段。所以一个Partition在物理上面是由
一个或者多个Segment构成的,每个Segment保存了真实的数据消息
partition和Segment之间的关系
1.每个partition都相当于一个大文件
被分配到大小相等的Segment文件中去,但是每个Segment的消息数量
未必相同。这个特点使得老的Segment文件可以很快被删除掉去
被分配到大小相等的Segment文件中去,但是每个Segment的消息数量
未必相同。这个特点使得老的Segment文件可以很快被删除掉去
2. 每个partition只需要支持顺序读写即可,Segment文件的生命周期是有Kafka Server的
配置所决定的。默认7天
配置所决定的。默认7天
分区文件4中类型的解释
1. 000000.index:是Segment文件一个索引文件
2. 00000000.log:是segment的数据文件,命名规则是
partition全局的第一个Segment从0开始,后续的每一个Segment
文件名为上一个segment文件最后一条消息的offset的值,没有数字
则用0代替。
partition全局的第一个Segment从0开始,后续的每一个Segment
文件名为上一个segment文件最后一条消息的offset的值,没有数字
则用0代替。
3. timeIndex: 改文件是一个基于消息日期的索引文件,主要
用途是在一些根据日期或者事件来寻找消息的场景下使用,
此外在基于时间的日志rolling或者文件保留策略下也会使用。
是在新版本下面新添加的
用途是在一些根据日期或者事件来寻找消息的场景下使用,
此外在基于时间的日志rolling或者文件保留策略下也会使用。
是在新版本下面新添加的
4. leader-epoch-checkpoint:是leader的一个缓存文件
基本概念
生产者
生产者就是生产消息的组件,主要工作就是源源不断的
生产消息,然后发送给消息队。
生产消息,然后发送给消息队。
消费者
消费者不断的去获取或者消费消息。
主题(topic)
一个主题可以有0个或者多个
消费者。多个生产可以向一个Topic发送消息
也可以多个消费者消费一个Topic中的消息
消费者。多个生产可以向一个Topic发送消息
也可以多个消费者消费一个Topic中的消息
分区的概念Partition
副本
topic和消息的关系:
每一条消息都归属于某一个Topic,对消息进行了分类
每一条消息都归属于某一个Topic,对消息进行了分类
代理(Broker)
Broker就是一台kafka的服务器
从流程上面来看的话 就是生产者会将信息发送给Broker
然后消费者会从Broker中拉取消息
从流程上面来看的话 就是生产者会将信息发送给Broker
然后消费者会从Broker中拉取消息
消息(Record)
它是指生产者发送与消费者拉取的一个原子事务.
一个消息需要关联到一个topic上。消息是由一串字节所构成
主要由Key和Value两部分内容。在发送消息的时候 我们可以省略掉Key
直接使用Value。
一个消息需要关联到一个topic上。消息是由一串字节所构成
主要由Key和Value两部分内容。在发送消息的时候 我们可以省略掉Key
直接使用Value。
key的作用其实是根据一定的策略将消息发送到指定的
分区当中,这样可以确保包含同一个key的消息全部写到同一个分区中
分区当中,这样可以确保包含同一个key的消息全部写到同一个分区中
所以 对于kafka的消息来说,真正的消息内容本身是有value所承载的。为了
提升消息发送的效率和存储效率, 生产者会批量将消息发送给broker,并根据
压缩算法在发送前进行压缩
提升消息发送的效率和存储效率, 生产者会批量将消息发送给broker,并根据
压缩算法在发送前进行压缩
集群(Cluster)
多个Broker共同构成一个整体
控制器(Controller):每个集群都会选择出一个
Broker担任控制器的角色,其实就是Leader的角色
Broker担任控制器的角色,其实就是Leader的角色
消费者组
在kafka中多个消费者可以共同构建成一个消费者组
,而一个消费者只能属于一个消费者组。
,而一个消费者只能属于一个消费者组。
实现最重要的功能就是广播和单播,一个消费组可以保证
其所订阅的Topic的每一个分区只能被该消费者组的唯一一个消费者所消费
,不同的消费者组不会彼此受到影响。因此:如果希望一条消息被多个消费者
消费,那就将消费者放到不同的消费组里面。如果希望一条消息只被一个消费者消费
将消费者放到同一个消费组里面
其所订阅的Topic的每一个分区只能被该消费者组的唯一一个消费者所消费
,不同的消费者组不会彼此受到影响。因此:如果希望一条消息被多个消费者
消费,那就将消费者放到不同的消费组里面。如果希望一条消息只被一个消费者消费
将消费者放到同一个消费组里面
基础脚本命令
1. 创建主题: kafka-topic.sh --create --zookeeper localhost:2182 --replication-factor 1 --partition 1 --topic myTopic
2. 显示已有主题列表: kafa-topic.sh --list --zookeeper localhost:2181
3. 查看某个主题的详情: kafa-topic.sh --describe --topic mytest --zookeeper localhost:2181
4. 开启生成者: kafka-console-producer.sh --broker-list localhost:9092 --topic myTopic
5. 开启消费者: kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic myTopic (--from-beginning)
6.zookeeper的命令
6.1 连接到kafka的zookeeper连接命令: zookeeper-shell.sh localhost:2181
zookeeper本质是一个树形结构,有根节点
它下面可以有若干个子节点,每个子节点有自己的属性等信息
它下面可以有若干个子节点,每个子节点有自己的属性等信息
6.2 ls 显示根节点下面的所有子节点
6.3 ls2 多了一些统计的信息
kafka下面的主题信息是维护在 /config/topic下面的
6.4 ls config/topic 就可以看到kafka节点信息
6. 主题删除
Kafka-topic.sh --zookeeper localhost:2181 --delete --topic myTopic
MQ特点
优点
1. 个个系统之间相互调用的解耦
2.对突然增大的数据访问量进行削峰
3. 对系统之间的数据分发修改容易
缺点
1. 系统可以用心降低
2. 系统复杂度上升
3. 一致性问题
0 条评论
下一页