Kafka目前主要作为一个分布式的发布订阅式的消息系统使用,下面简单介绍一下kafka的基本机制

  1.3.1 消息传输流程

    Producer即生产者,向Kafka集群发送消息,在发送消息之前,会对消息进行分类,即Topic,上图展示了两个producer发送了分类为topic1的消息,另外一个发送了topic2的消息。

    Topic即主题,通过对消息指定主题可以将消息分类,消费者可以只关注自己需要的Topic中的消息

    Consumer即消费者,消费者通过与kafka集群建立长连接的方式,不断地从集群中拉取消息,然后可以对这些消息进行处理。

    从上图中就可以看出同一个Topic下的消费者和生产者的数量并不是对应的。

  1.3.2 kafka服务器消息存储策略

    谈到kafka的存储,就不得不提到分区,即partitions,创建一个topic时,同时可以指定分区数目,分区数越多,其吞吐量也越大,但是需要的资源也越多,同时也会导致更高的不可用性,kafka在接收到生产者发送的消息之后,会根据均衡策略将消息存储到不同的分区中。

  在每个分区中,消息以顺序存储,最晚接收的的消息会最后被消费。

  1.3.3 与生产者的交互

    生产者在向kafka集群发送消息的时候,可以通过指定分区来发送到指定的分区中

    也可以通过指定均衡策略来将消息发送到不同的分区中

    如果不指定,就会采用默认的随机均衡策略,将消息随机的存储到不同的分区中

  1.3.4  与消费者的交互

    在消费者消费消息时,kafka使用offset来记录当前消费的位置

    在kafka的设计中,可以有多个不同的group来同时消费同一个topic下的消息,如图,我们有两个不同的group同时消费,他们的的消费的记录位置offset各不项目,不互相干扰。

    对于一个group而言,消费者的数量不应该多余分区的数量,因为在一个group中,每个分区至多只能绑定到一个消费者上,即一个消费者可以消费多个分区,一个分区只能给一个消费者消费

    因此,若一个group中的消费者数量大于分区数量的话,多余的消费者将不会收到任何消息。

参考:https://www.cnblogs.com/hei12138/p/7805475.html

最新文章

  1. 初识 Html5
  2. python头部注释 vim添加头部注释
  3. 克隆虚拟机重启服务时 Error:No suitable device found: no device found for connection "System eth0"
  4. 如何hash一条有向边
  5. :before\:after伪元素用法
  6. hdu---(1280)前m大的数(计数排序)
  7. TAxThread - Inter thread message based communication - Delphi
  8. CSS各个浏览器Hack的写法
  9. 开源java
  10. 关于User Defined Runtime Attributes的小技巧
  11. HDU 5806 - NanoApe Loves Sequence Ⅱ (BestCoder Round #86)
  12. 网站教学 提纲总结到ajax结束后面还有
  13. bower工具的简单使用
  14. FastCgi与Cgi
  15. css——样式表分类,选择器
  16. 如何优雅的设计 React 组件
  17. iscroll遇到的两个坑
  18. vue2.0+koa2+mongodb实现注册登录
  19. 【CF932E】Perpetual Subtraction(NTT,线性代数)
  20. Python——装饰器

热门文章

  1. Vue-think脚手架
  2. js 伪数组 arguments
  3. POJ1358 Agri-Net
  4. TextInput
  5. JavaWeb学习笔记(十一)—— JavaWeb开发模式【转】
  6. DDOS压力测试
  7. day--86(MongoDB数据库)
  8. python学习之路---day008
  9. P4294 [WC2008]游览计划
  10. POJ - 1961 最小循环节