1、一、MQ 系统 二、Kafka 架构 三、Kafka 命令 四、配置文件,MQ 系统,一、Redis 二、ZeroMQ 三、ActiveMQ 四、RocketMQ 五、Kafka,MQ系统,Redis Redis是一个NoSQL数据库 处理小流量的消息队列 不适用于大流量的应用场景,MQ系统,ActiveMQ ActiveMQ 2007 年发布第一个版本(同年 JDK1.5发布) 被广泛应用于零售、银行、电子商务和政府等领域。 稳定性好,性能还过得去。 缺少异步 Java API 和 NIO支持,在高资源配置的计算机上扩展性不佳。 Apollo 重写了 ActiveMQ 内核, Apache称
2、其为最快、最强健的STOMP(Streaming Text Orientated Message Protocol,流文本定向消息协议)服务器。 github 一年多没更新,网传 Apollo项目已经失败,MQ系统,ZeroMQ 不支持序列化,阅后即焚。如果服务器宕机,数据将丢失 ZeroMQ本身只是一个网络协议栈的实现库.使用过程中由应用服务器扮演服务器的角色 ZeroMQ的目标是,成为 Linux 内核的一部分 逆天的性能,MQ系统,Kafak VS RocketMQ 定位 Kafak:由 Linkin 开源,用于即时的日志传输 RocketMQ:由淘宝开源,实现非日志的可靠消息传输,用于
3、交易、订单、充值等场景 TPS 性能 kafka 单机写入 TPS 在百万条/秒,消息大小为10b RocketMQ 单机 7万条/秒,消息大小为10b 队列数 kafak 单机超过 64个队列/分区,Load 会发生明显的飙高现象 RocketMQ 最高支持 5万队列 实时性 Kafka使用短轮询方式,实时性取决于轮询间隔时间 RocketMQ使用长轮询,同Push方式实时性一致,消息的投递延时通常在几个毫秒。 成熟度 Kafka在日志领域比较成熟,操作系统Crash,会导致数据丢失 RocketMQ在阿里集团内部有大量的应用在使用,不会丢消息,MQ系统,总结,Kafka 架构,系统结构,k
4、afka cluster,Broker 1,Broker 2,Broker 3,Producer-A,Producer-B,Producer-C,Consumer-A,Consumer-A,Consumer-C,Zookeeper,基础架构,Kafka 架构,基本概念 主题:topic 分区:partition 消息:message 生产者:producer 消费者:consumer group 消息队列:broker,Kafka 架构,kafka 消息流程图,topic,消息队列,Producer-A,Producer-B,Consumer,consumer group,partition,
5、producer,注1:消息队列依赖于本地磁盘 注2:默认情况下,磁盘存储会保存 7 天,Kafka 架构,kafka 消息流程图,topic,消息队列,Producer-A,Producer-B,Consumer,consumer group,partition,producer,注1:在一个由6个7200rpm的SATA硬盘组成的RAID-5磁盘阵列上,线性写入的速度大约是300MB/秒,随机写入却只有50k/秒。 注2:在某些情况下,顺序磁盘访问能够比【随机】内存访问还要快!,Kafka 架构,kafka 集群运行流程图,topic,Producer-A,Producer-B,Consu
6、mer-A,Consumer-B,Consumer-C,consumer group,partition 1,partition 2,partition 3,producer,Kafka 架构,topic & partition,producer 怎么保证业务有序?,1、每个 partition 对应一个文件(夹) 2、分文件存储利于增加 topic 消息容量 3、把 partition 放在不同磁盘上,可以提高读写性能 4、把 partition 分散在不同机器上,支持负载均衡 5、通过迁移单个 partition, 实现快速水平扩展 6、partition内有序,partition间无序,
7、Kafka 架构,producer,consumer 处理速度跟不上怎么办?,1、自定义 partitioner, 保证同族消息保存在相同 partition 中,默认为 hash 算法随机分配 2、异步提交时,会把多个消息合并,提高IO性能 3、如果对 topic 进行水平扩容,producer 需要重新获取 broker 列表,重新连接,Kafka 架构,consumer,不同的 consumer Group 之间有什么关系?,1、一个 partition 只会被一个 consumer 线程连接; 2、一个 consumer group 由多个 consumer 线程组成; 3、一个 co
8、nsumer group 可以同时被多个进程使用。,Kafka 架构,consumer group,注:Group A 和 Group B 会收到的是完全相同的消息,Kafka 架构,kafka 在 zookeeper 中的数据,Kafka 命令,数据分区和水平扩展 1、创建一个 16 分区,双备的 topic./bin/kafka-topics.sh -create -zookeeper 10.100.10.200:2181 -replication-factor 2 -partitions 16 -topic my-topic 2、水平扩展 ./bin/kafka-reassign-partitions.sh -execute -manual-assignment-json-file partitions-to-move.json cat partitions-to-move.json:“partitions“: “topic“: “my-topic“, “partition“: 1, “replicas“: 1,4 ,把一个partition的replica从broker 1,2 迁移到 broker 1,4上,配置文件,producer,配置文件,consumer,配置文件,broker,Kafka 性能报告(A),Kafka 性能报告(B),Q & A,提问答疑,