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