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