kafka学习笔记

1. 什么是kafka,kafka是一个分布式消息系统

    kafka 是一个消息订阅发布系统,跟其他的消息应用相比,kafa有比较独特的地方,

  • 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
  • 高吞吐量 [2]   :即使是非常普通的硬件Kafka也可以支持每秒数百万 [2]   的消息。
  • 支持通过Kafka服务器和消费机集群来分区消息。
  • 支持 Hadoop并行数据加载。 [3]  

2. kafka 的工作方式

(1) topic,一个topic就是一类消息,每个topic又分为多个partition,partition是具体存储消息的地方,任何发布到partition的消息都会被追加到partition文件的尾部,值得关注的是,partition跟JMS或者queue不同,及时消息被消费了,这条消息依然不会被马上删除,kafka会根据broker中的配置,来决定保留多长时间后删除,比如配置的是2天,那么这些消息2天后,不关该消息是否被消费都会被删除。这种方式的好处是可以及时释放磁盘空间,以及减少消息消费之后,对文件内容改动的磁盘IO开支。

(2) Distribution

 一个topic的多个partitions,被分布在kafka集群中的多个server上,每个server(kafka实例)负责partitions中消息的读写操作,另外kafka还可以配置partitions需要备份的额个数,replicas,每个partion将会被备份到多台机器上,来提高可用性。

(3)Producer

Producer将消息发布到topic中,同时Producer也能决定将此消息归属于哪个partition;比如基于“”round-robin“方式或者通过其他的一些算法等。  

(4) Consumers

Consumer端向broker发送fetch请求,并告知其获取消息的offset;此后consumer将会获得一定条数的消息,consumer端也可以重置offset来重新消费消息,

在JMS的实现中,Topic模型基于push方式,即broker将消息推送给consumer端,不过在kafka中,采用了pull方式,即consumer在和broker建立连接后主动去pull消息,这种方式的好处是consumer端可以根据自己的消费能力适时的去fetch消息并处理,并且可以控制消息的消费进度,此外消费者可以良好的控制消息的消费数量。

 每个Consumer属于一个Consumer group,发送到Topic的消息,只会被订阅此Topic的每个group中的一个Consumer消费

 如果所有的consumer都具有相同的group,这种情况跟queue,模式很向,消息将会在consumer之间负载均衡,

如果所有的consumer都具有不同的group,就是“”“发布-订阅”,消息将广播给所有的消费者,

  一个partition中的消息只会被group中的一个consumer消费,每个group中的consumer消息消费相互独立;

针对consumer而言,它需要保存消息的offset,即消息在partition中的位置,每次consumer消费消息时,根据offset来获取新的消息


  kafka 的模型结构如下图,一个topic 分为多个partition,Producer将消息发布到指定的topic中,同时Producer也能决定将此消息归属于那个partition,比如基于round-robin或者其他的一些算法,Consumer 

   



3.消息传送机制

 对于JMS实现,消息传输担保非常直接:有且只有一次(excatly once)。在kafka中稍有一些不同。

 (1)at most once:最多一次,这个和JMS中的非持久化 消息类似,发送一次,无论成败,将不会重发

(2)at least once:消息至少发送一次,如果消息未能成功接收,可能重发,直到接收成功。

(3)exactly once:消息只会发送一次。

   at most once:消费者fetch消息,然后保存offset,然后处理消息,当client保存offset之后,但是在消费处理过程中出现了异常,导致部分消息未能继续处理,那么此后,为处理的消息将不能被fetch到。

 at least once:消费者fetch消息,然后处理消息,然后保存offset,如果消息处理成功之后,但是保存offset阶段,zookeeper异常导致保存操作未能执行成功,这就导致接下来再次fetch时,可能获得上次已经处理过的消息,这就是at least once,原因offset没有及时的提交给zookeeper,zookeeper回复正常之前还是offset状态,

4, zookeeper

1) Producer端使用zookeeper用来"发现"broker列表,以及和Topic下每个partition leader建立socket连接并发送消息.
    2) Broker端使用zookeeper用来注册broker信息,已经监测partitionleader存活性.
    3) Consumer端使用zookeeper用来注册consumer信息,其中包括consumer消费的partition列表等,同时也用来发现broker列表,并和partition leader建立socket连接,并获取消息.


5,大家kafka的步骤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值