/*今晚整理了一点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
![](https://i-blog.csdnimg.cn/blog_migrate/6f9c4c23e4e1f7540f6621ebd0c8b584.png)
/*
*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