1、Kafka 一、MQ 系统 二、Kafka 架构 三、Kafka 命令 四、配置文件MQ 系统 一、Redis 二、ZeroMQ 三、ActiveMQ 四、RocketMQ 五、KafkaMQ系统 Redis Redis是一个NoSQL数据库 处理小流量的消息队列 不适用于大流量的应用场景MQ系统 ActiveMQ ActiveMQ 2007 年发布第一个版本(同年 JDK1.5发布) 被广泛应用于零售、银行、电子商务和政府等领域。 稳定性好,性能还过得去。 缺少异步 Java API 和 NIO支持,在高资源配置的计算机上扩展性不佳。 Apollo 重写了 ActiveMQ 内核, Apac
2、he称其为最快、最强健的STOMP(Streaming Text Orientated Message Protocol,流文本定向消息协议)服务器。 github 一年多没更新,网传 Apollo项目已经失败MQ系统 ZeroMQ 不支持序列化,阅后即焚。如果服务器宕机,数据将丢失 ZeroMQ本身只是一个网络协议栈的实现库.使用过程中由应用服务器扮演服务器的角色 ZeroMQ的目标是,成为 Linux 内核的一部分 逆天的性能MQ系统Kafak VS RocketMQ定位Kafak:由 Linkin 开源,用于即时的日志传输RocketMQ:由淘宝开源,实现非日志的可靠消息传输,用于交易、
3、订单、充值等场景TPS 性能kafka 单机写入 TPS 在百万条/秒,消息大小为10bRocketMQ 单机 7万条/秒,消息大小为10b队列数kafak 单机超过 64个队列/分区,Load 会发生明显的飙高现象RocketMQ 最高支持 5万队列实时性Kafka使用短轮询方式,实时性取决于轮询间隔时间RocketMQ使用长轮询,同Push方式实时性一致,消息的投递延时通常在几个毫秒。成熟度Kafka在日志领域比较成熟,操作系统Crash,会导致数据丢失RocketMQ在阿里集团内部有大量的应用在使用,不会丢消息MQ系统 总结MQ系统系统特点特点Redis NO-SQL数据库,适用于处理少
4、量 MQ 数据ActiveMQ久经沙场的老战士,稳定性好ZeroMQ一个网络通信协议栈性能超级强劲RocketMQ阿里出品标准 MQ 系统中性能最好的Kafka/Jafka 专为日志收集设计非标准 MQ 系统,容灾能力弱,性能超过 RocketMQ消息处理速度上限大约为 100MB/s Kafka 架构系统结构kafka clusterBroker 1Broker 2Broker 3Producer-AProducer-BProducer-CConsumer-AConsumer-AConsumer-CZookeeper 基础架构Kafka 架构 基本概念 主题:topic 分区:partiti
5、on 消息:message 生产者:producer 消费者:consumer group 消息队列:brokerProducerTopicConsumer GroupPartitionConsumer11.N11.NKafka 架构 kafka 消息流程图topic消息队列Producer-AProducer-BConsumerconsumer grouppartitionproducer本地磁盘注1:消息队列依赖于本地磁盘注2:默认情况下,磁盘存储会保存 7 天Kafka 架构 kafka 消息流程图topic消息队列Producer-AProducer-BConsumerconsumer
6、 grouppartitionproducer本地磁盘1本地磁盘2注1:在一个由6个7200rpm的SATA硬盘组成的RAID-5磁盘阵列上, 线性写入的速度大约是300MB/秒,随机写入却只有50k/秒。注2:在某些情况下,顺序磁盘访问能够比内存访问还要快!Kafka 架构 kafka 集群运行流程图broker(1)broker(2)topic13741282109611Producer-AProducer-BConsumer-AConsumer-BConsumer-Cconsumer grouppartition 1partition 2partition 3producerKafka
7、架构 topic & partitiontopicbroker(1)13741282broker(2)109611Producer-AProducer-BConsumer-AConsumer-BConsumer-Cconsumer grouppartition 1partition 2partition 3producerproducer 怎么保证业务有序?1、每个 partition 对应一个文件(夹)2、分文件存储利于增加 topic 消息容量3、把 partition 放在不同磁盘上,可以提高读写性能4、把 partition 分散在不同机器上,支持负载均衡5、通过迁移单个 partit
8、ion, 实现快速水平扩展6、partition内有序,partition间无序Kafka 架构 producertopicbroker(1)13741282broker(2)109611Producer-AProducer-BConsumer-AConsumer-BConsumer-Cconsumer grouppartition 1partition 2partition 3producerconsumer 处理速度跟不上怎么办?1、自定义 partitioner, 保证同族消息保存在相同 partition 中,默认为 hash 算法随机分配2、异步提交时,会把多个消息合并,提高IO性能
9、3、如果对 topic 进行水平扩容,producer 需要重新获取 broker 列表,重新连接Kafka 架构 consumertopicbroker(1)13741282broker(2)109611Producer-AProducer-BConsumer-AConsumer-BConsumer-Cconsumer grouppartition 1partition 2partition 3producer不同的 consumer Group 之间有什么关系?Thread-AThread-BThread-C1、一个 partition 只会被一个 consumer 线程连接;2、一个 c
10、onsumer group 由多个 consumer 线程组成;3、一个 consumer 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-to
11、pic 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配置文件 brokerKafka 性能报告(A)Kafka 性能报告(B)Q & A提问答疑人有了知识,就会具备各种分析能力,明辨是非的能力。所以我们要勤恳读书,广泛阅读,古人说“书中自有黄金屋。”通过阅读科技书籍,我们能丰富知识,培养逻辑思维能力;通过阅读文学作品,我们能提高文学鉴赏水平,培养文学情趣;通过阅读报刊,我们能增长见识,扩大自己的知识面。有许多书籍还能培养我们的道德情操,给我们巨大的精神力量,鼓舞我们前进。