消息中间件-Kafka讲解课件.ppt
Kafka,一、MQ 系统二、Kafka 架构三、Kafka 命令四、配置文件,MQ 系统,一、Redis二、ZeroMQ三、ActiveMQ四、RocketMQ五、Kafka,MQ系统,RedisRedis是一个NoSQL数据库处理小流量的消息队列不适用于大流量的应用场景,MQ系统,ActiveMQActiveMQ2007 年发布第一个版本(同年 JDK1.5发布)被广泛应用于零售、银行、电子商务和政府等领域。稳定性好,性能还过得去。缺少异步 Java API 和 NIO支持,在高资源配置的计算机上扩展性不佳。Apollo重写了 ActiveMQ 内核,Apache称其为最快、最强健的STOMP(Streaming Text Orientated Message Protocol,流文本定向消息协议)服务器。github 一年多没更新,网传 Apollo项目已经失败,MQ系统,ZeroMQ不支持序列化,阅后即焚。如果服务器宕机,数据将丢失ZeroMQ本身只是一个网络协议栈的实现库.使用过程中由应用服务器扮演服务器的角色ZeroMQ的目标是,成为 Linux 内核的一部分逆天的性能,MQ系统,Kafak VS RocketMQ定位Kafak:由 Linkin 开源,用于即时的日志传输RocketMQ:由淘宝开源,实现非日志的可靠消息传输,用于交易、订单、充值等场景TPS 性能kafka 单机写入 TPS 在百万条/秒,消息大小为10bRocketMQ 单机 7万条/秒,消息大小为10b队列数kafak 单机超过 64个队列/分区,Load 会发生明显的飙高现象RocketMQ 最高支持 5万队列实时性Kafka使用短轮询方式,实时性取决于轮询间隔时间RocketMQ使用长轮询,同Push方式实时性一致,消息的投递延时通常在几个毫秒。成熟度Kafka在日志领域比较成熟,操作系统Crash,会导致数据丢失RocketMQ在阿里集团内部有大量的应用在使用,不会丢消息,MQ系统,总结,Kafka 架构,系统结构,kafka 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,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,Consumer-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间无序,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、一个 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-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,提问答疑,人有了知识,就会具备各种分析能力,明辨是非的能力。所以我们要勤恳读书,广泛阅读,古人说“书中自有黄金屋。”通过阅读科技书籍,我们能丰富知识,培养逻辑思维能力;通过阅读文学作品,我们能提高文学鉴赏水平,培养文学情趣;通过阅读报刊,我们能增长见识,扩大自己的知识面。有许多书籍还能培养我们的道德情操,给我们巨大的精神力量,鼓舞我们前进。,