消息队列中间件kafka入门

目录

 

什么是kafka

为什么要使用消息中间件kafka

Kafka与其它中间件的区别

Kafka的简单演变

Zookeeper在kafka中的作用

如何选择partitions的数目

什么是kafka的消费者组

剩余的内容

参考文章


什么是kafka

Kafka是一个分布式消息传递系统,通过发布-订阅模型提供快速、高可伸缩性和冗余的消息传递。

为什么要使用消息中间件kafka

解耦,异步,削峰,这是消息队列的三大优势。

Kafka与其它中间件的区别

中小型软件公司,建议选RabbitMQ,万级别,us,主从架构。

大型软件公司,根据具体使用在rocketMq和kafka之间二选一。十万级别,ms,分布式架构。

Kafka的简单演变

kafka一代

 

简单的先入先出队列,生产者放入消息,消费者拿出消息处理。消费者端会记录一个offset,表明该消费者当前消费到哪条数据,所以下次消费者想继续消费,只需从offset+1的位置继续消费就好了。消费者甚至可以通过调整offset的值,重新消费以前的数据。

 

出现的问题:

 

所有消息都放到一个队列当中,一方面消息的类型鱼龙混杂,另一方面,消息增多,速度一定会很慢。

 

Kafka二代

 

采用多条队列, 每条队列里面的消息都是相同的topic。一个队列只有一种topic,消费者再也不用担心会碰到不是自己想要的topic的消息了。提高吞吐量。不同topic的消息交给不同队列去存储,再也不用以一敌十了。消息可以根据topic和key选择合适的Partition队列。

 

什么是topic?

 

所有Kafka消息都被组织成主题topic。如果你想发送一条消息,你就把它发送到一个特定的topic,如果你想读一条消息,你就从一个特定的topic读它。

 

出现的问题:

 

高可用性,单点是不可靠的。

 

Kafka三代

 

解决单点不可靠的问题,引入了集群。Kafka对集群的支持也是非常友好的。在Kafka中,集群里的每个实例叫做Broker。每个partition不再只有一个,而是有一个leader(红色)和多个replica(蓝色),生产者根据消息的topic和key值,确定了消息要发往哪个partition之后(假设是p1),会找到partition对应的leader(也就是broker2里的p1),然后将消息发给leader,leader负责消息的写入,并与其余的replica进行同步。一旦某一个partition的leader挂掉了,那么只需提拔一个replica出来,让它成为leader就ok了,系统依旧可以正常运行。

Zookeeper在kafka中的作用

  1. 使用Zookeeper来进行所有Broker的管理。
  2. 生产者通过监听zookeeper上Broker节点感知Broker,Topic的状态,变更,来实现动态负载均衡机制,当然这个机制Kafka已经结合zookeeper实现了。
  3. 记录消息消费进度Offset记录。
  4. 记录消息分区于消费者的关系。

另外,新版本在主键弱化zookeeper的作用,减少了对zookeeper的依赖。

 

如何选择partitions的数目

越多的partitions会有更高的吞吐量,但是它会增加时延,不可靠性,以及更多的存储空间。所以,需要一些权衡。

什么是kafka的消费者组

消费者组保证了以下内容:

  1. 一个分区只可以被消费组中的一个消费者所消费。
  2. 一个消费组中的一个消费者可以消费多个分区。
  3. 一个消费组中的不同消费者消费的分区一定不会重复。
  4. 一个消费组所有消费者一起消费所有的分区

作用:

  1. 高性能,同一个消费者组的消费者分担了压力,比一个消费者强。
  2. 消费模式灵活,可以有不同的组合方式。
  3. 故障容灾,如果一个消费者组中的一个消费者故障了,其它消费者仍然可以消费所有的分区。

 

剩余的内容

下载并安装kafka,搭建环境。

Kafka的简单生产者消费者代码实现。

参考文章

  1. https://zhuanlan.zhihu.com/p/37405836
  2. https://sookocheff.com/post/kafka/kafka-in-a-nutshell/
  3. https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying
  4. https://blog.csdn.net/u011311291/article/details/85264046?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
  5. https://www.confluent.io/blog/how-choose-number-topics-partitions-kafka-cluster/
  6. https://blog.csdn.net/john1337/article/details/103060820

关注微信公众号,你还有头发吗,获取更多java软件开发学习资源,覆盖java基础,android,网络编程,并发编程,mysql,linux,算法,以及C++和python书籍资源。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章