Kafka原理及实战01

消息系统分类

Peer-to-Perr

 一般基于Pull或者Polling接收消息

发送到队列中的消息被一个而且仅仅一个接受者所接收,即使有多个接受者在同一个队列中侦听同一消息

即支持异步"即发即弃"的消息传送方式,也支持同步请求/应答传送方式

发布/订阅

发布到一个主题的消息,可被多个订阅所接收

发布/订阅即可基于Push消费数据,也可基于Pull或者Polling消费数据

解耦能力比P2P模型更强

消息系统的使用场景

解耦: 各位系统之间通过消息系统这个统一的接口交换数据,无须了解彼此的存在

冗余: 部分消息系统具有消息持久化能力,可规避消息处理前丢失的风险

扩展: 消息系统是统一的数据接口,各系统可独立扩展

峰值处理能力: 消息系统可顶住峰值流量,业务系统可根据处理能力从消息系统中获取并处理对应量的请求。

可恢复性: 系统中部分组件失效并不会影响整个系统,它恢复后仍然可从消息系统中获取并处理数据

异步通信: 在不需要立即处理请求的场景下,可以将请求放入消息系统,合适的时候再处理

 

常用消息系统对比

RabbitMQ: Erlang编写,支持多协议 AMQP,XMPP,SMTP,STOMP。支持负载均衡、数据持久化。同时支持Peer-to-Peer和发布/订阅模式

Redis: 基于Key-Value对的NoSQL数据库,同时支持MQ功能,可做轻量级队列服务使用。就入队操作而言,Redis对短消息(小于10KB)的性能比RabbitMQ好,长消息的性能比RabbitMQ差。

ZeroMQ: 轻量级,不需要单独的消息服务器或中间件,应用程序本身扮演该角色,Peer-to-Peer。它实质上是一个库,需要开发人员自己组合多种技术,使用复杂度高

ActiveMQ :JMS实现,Peer-to-Peer,支持持久化、XA事务

Kafka/Jafka :高性能跨语言的分布式发布/订阅消息系统,数据持久化,全分布式,同时支持在线和离线处理

MetaQ/RocketMQ :纯Java实现,发布/订阅消息系统,支持本地事务和XA分布式事务。

 

Kafka设计目标

高吞吐率: 在廉价的商用机器上单机可支持每秒100万条消息的读写 ( 8C 16 G 网卡1Gb)

消息持久化: 所有消息均被持久化到磁盘,无消息丢失,支持消息重放

完全分布式 : Producer,Broker,Consumer均支持水平扩展同时适应在线流处理和离线批处理

 

Kafka架构图

创建topic

bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic test1 --partitions 1 --replication-factor 1

查看kafka topic的描述信息

bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic test1

生产者

bin/kafka-console-producer.sh --topic test1 --broker-list localhost:9092

消费者

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test1

数据复制

bin/kafka-replay-log-producer.sh --broker-list localhost:9092 --zookeeper localhost:2181 --inputtopic test1 --outputtopic test2

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值