kafka--分布式消息系统01

/*今晚整理了一点kafka的知识,很开心!
*当然要感谢教我这些知识的大神!*/
kafka分布式发布订阅消息系统
  • 数据的传输方式
1.socket
c/s交互模式,服务器提供服务,通过ip地址和客户端进行访问;客户机通过连接服务器指定的端口进行消息交互。其中传输协议可以是tcp/UDP 协议。而服务器约定了请求报文格式和响应报文格式。
优点: 1.易于编程,目前java提供了多种框架,屏蔽了底层通信细节以及数据传输转换细节。
           2.容易控制权限。通过传输层协议https,加密传输的数据,使得安全性提高 
           3.通用性比较强,无论客户端是.net架构,java,python 都可以。尤其是webservice规范,使得服务变得通用 
缺点: 1.服务器和客户端必须同时工作,当服务器端不可用的时候,整个数据交互是不可进行。 
           2.当传输数据量比较大的时候,严重占用网络带宽,可能导致连接超时。使得在数据量交互的时候,服务变的很不可靠。
2.ftp/文件共享服务器方式
系统A和系统B约定文件服务器地址,文件命名规则,文件内容格式等内容,通过上传文件到文件服务器进行数据交互。
优点:1.在数据量大的情况下,可以通过文件传输,不会超时,不占用网络带宽。
          2.方案简单,避免了网络传输,网络协议相关的概念。
 缺点: 1.不太适合做实时类的业务 
            2.必须有共同的文件服务器,文件服务器这里面存在风险。因为文件可能被篡改,删除,或者存在泄密等。
            3.必须约定文件数据的格式,当改变文件格式的时候,需要各个系统都同步做修改。

3.数据库共享数据方式
系统A和系统B通过连接同一个数据库服务器的同一张表进行数据交换。当系统A请求系统B处理数据的时候,系统A Insert一条数据,系统B select 系统A插入的数据进行处理。 
优点: 
    1.相比文件方式传输来说,因为使用的同一个数据库,交互更加简单。 
    2.由于数据库提供相当做的操作,比如更新,回滚等。交互方式比较灵活,而且通过数据库的事务机制,可以做成可靠性的数据交换。 
缺点: 
    1.当连接B的系统越来越多的时候,由于数据库的连接池是有限的,导致每个系统分配到的连接不会很多,当系统越来越多的时候,可能导致无可用的数据库连接。 
    2.一般情况,来自两个不同公司的系统,不太会开放自己的数据库给对方连接,因为这样会有安全性影响。

4.消息中间件方式
Java消息服务(Java Message Service)是message数据传输的典型的实现方式。系统A和系统B通过一个消息服务器进行数据交换。
系统A发送消息到消息服务器,如果系统B订阅系统A发送过来的消息,消息服务器会消息推送给B。双方约定消息格式即可。目前市场上有很多开源的jms消息中间件,比如 ActiveMQ, OpenJMS 。
 优点: 
    1.由于JMS定义了规范,有很多的开源的消息中间件可以选择,而且比较通用。接入起来相对也比较简单 
    2.通过消息方式比较灵活,可以采取同步,异步,可靠性的消息处理,消息中间件也可以独立出来部署。
缺点: 
    1.学习JMS相关的基础知识,消息中间件的具体配置,以及实现的细节对于开发人员来说还是有一点学习成本的 
    2.在大数据量的情况下,消息可能会产生积压,导致消息延迟,消息丢失,甚至消息中间件崩溃。
消息中间件的优势
系统解耦
削峰填谷
数据交换
异步通知
定时任务
  • ​二、消息中间件--Kafka

/*
*Consumer(消费者)和broker都要在zookeeper注册*/
Kafka的特征
持久性消息 要从大数据得到有价值的信息,我们都承担不起丢失任何的信息。Apache Kafka采用O disk structure,提供稳定的 TB级消息存储。
高吞吐量 Kafka设计工作在商用硬件上,提供每秒百万的消息
分布式 Kafka支持在Kafka服务器上消息分区和整个集群上的分布式的消费,并且维护每个分区的排序。
多客户端支持 Kafka系统支持不同客户端的集成,包括Java、.NET、PHP、Ruby和Python
实时消息由生产者线程生成出来应该立刻被消费者线程看到,这个特征的关键是基于事件的系统例如Complex Event Processing(CEP)系统。
Broker 
    Kafka集群包含一个或多个服务器,这种服务器被称为broker 
Topic 
    每条发布到Kafka集群的消息都有一个类别,这个类别被称为topic(主题)。(每个消费者要指定主题才能拿到相应的消息
(物理上不同topic的消息分开存储,逻辑上 一个topic的消息虽然保存于一个或多个broker上但用户只需指定消息的topic即可生产或消费数据而不必关心数据存于何处)
/*可以看成一个队列queue,生产者发送消息到队列的不同地方,消费者指定不同的topic,取相应的消息*/
Partition 
    partition是物理上的概念,每个topic包含一个或多个partition,创建topic时可指定parition数量。每个partition 对应于一个文件夹,该文件夹下存储该partition的数据和索引文件 
Producer 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值