浅谈kafka 篇一

脑子很乱, 写个博客来清醒一下,最近项目中有用到kafka, 所以就来抛砖引玉,浅谈一下kafka。

l  Kafka 是什么?

Kafka 是一款分布式的消息中间件,相比较于传统的消息中间件,例如activeMq和TIBECO EMS。Kafka 有下面这些优点。

  1. Kafka 吞吐量更加高

    吞吐量这个角度的话,首先kafka是分布式的,可以通过 通过zookeeper来协调各个整个集群,相比较于单个节点的activeMq和TIBECO EMS肯定吞吐量更加高,还有一个原因是kafka 对于磁盘的顺序读写,导致他的吞吐量更加高。

  1. Kafka的扩展性更加强

    扩展性更加强,主要体现在两个方面,第一个是集群方面的扩展性,这是由于其分布式特点决定的,由于是分布式的,所以当kafka支撑不了整个业务的时候,可以通过横向的增加机器来扩展,再来聊聊微观的扩展性,主要体现在代码层面,由于kafka不符合JMS规范(像activeMQ和TIBECO EMS 就是JMS规范的),所以她的扩展性自然而然就高了,这一点在我司大牛的代码对kafka封装中也可以看到,在Producer 和 Consumer 中各种线程池和各种自定义线程池饱和策略(表示还没有看懂)

  1. Kafka的鲁棒性更好

    首先,kafka发送上去的消息是存副本的,他有自己的算法将副本随机分配到各个节点并且把。其次维护了一个队列(in sync replicas“(ISR)),当其中的leader节点挂掉的时候,会从其中随机找一个来做leader。这样整个集群就可以继续工作了。

  1. Kafka的功能更加强大

    这个东西是由他的设计决定的。首先,从设计模式上来讲它是一个Observer(或者说是一个生产者消费者模式),Oberser 就是观察者模式,总线的设计就是一个观察者模式,还有就是以前看过GWT 里面的 Event BUS 的设计就是一个Observer,这一点和普通的JMS 消息中间件是一样的。只不过由于他是分布式的,可以存储的数据量很大,这一点决定了她的API很丰富,也决定了她的设计更加复杂,详情见下下面的基本概念。总之,kafka 是一个功能强大的Observer。

   

l  Kafka 基本概念和API(参考官网http://kafka.apache.org/)

基本概念:

Topic 和 partition:是一个逻辑上的概念,由随机分布在各个节点上的partition组成,partition 就是一个个的文件,kafka会往其中追加消息。

Producer:生产者

Broker:就是集群的意思

Consumer:消费者

Consumer group:消费组,在同一个消费组中的consumer 存在竞争关系,所以topic 相当于一个queue, 如果是在不同的组中,那么各个consumer 不存在竞争关系,topic就是topic 了

API:

  1. Consumer API
  2. Producer API
  3. Connectors API
  4. Steam API

   

 

    总之,传统的消息中间件没有这么多的概念,也就没有这么复杂的设计啦,所以kafka 的功能也就比一般的消息中间件要强大一点罗,比如可以设置消息过期时间,相当于一个redis等等,

还有好多概念,这里就不多说了。

l  Kafka 能做什么?

所有的流式数据都可以放到kafka 中,说白了就是系统运行时产生的数据都可以放进去,比如格式化的Log. 银行的话各种未加工的交易信息,一句话就是流式数据都可以放到kafka.

其实还有一点就是可以设置过期时间,这一点很有用的,在以前的项目经验中,因为是使用的TIBCO EMS,消息消费一次之后,就被删除了,导致有时候整个Job跑失败的话,需要把消息消费掉,然后重新push,这样很麻烦,用kafka 就不会存在这个问题,可以设置过期时间(有点像Redis),好爽,有木有?

l  为什么要用kafka

说了这么多其实就是因为kafka的功能比较强大,而且相比较于传统的JMS中间件优点很明显。

l  Questions(接下来有空的时候要弄懂的问题,看源码)

  1. 我司大牛怎么写的自定义线程池饱和策略以及为什么要自定义这个策略(策略模式)
  2. 我司大牛怎么封装kafka的API
  3. Consumer 怎么实现监听的
  4. 怎么和Spark 交互的,Spark的离线Job 怎么跑的

 

 

posted @ 2017-11-17 23:27  tyrion~yao  阅读(343)  评论(0)    收藏  举报