kafka是一个分布式发布订阅消息系统,也可叫做MQ系统,MQ是Message Queue,消息队列。

通俗点,生产者往队列里写消息,消费者从队列里读。专业点,Producer通过TCP协议发送消息到Kafka集群,Kafka集群再将这些消息提供给Consumer。

消息是由key、value、时间戳构成,按topic分类。工作中经常听到的topic,就是这个topic,用来给消息分类。

整体流程如官网画的图所示。

kafka有个Broker的概念,指的就是集群中的服务器,每一个服务器就是一个代理(Broker)。

消费者往往按需分成多个组,称为消费者组(consumer group)。

kafka通过topic的partition来解决消息异步传递造成并行消费的问题。

每个partition有一个leader,零或多个follower。Leader处理此分区的所有的读写请求,而follower被动的复制数据。若Leader down掉了,从follower中产生新的Leader。一个Broker可能同时是一个分区的leader,另一个分区的follower。

生产者发topic发哪个分区呢?最简单的方式是从分区列表中轮流选择。也可以按特定算法来选分区。

消息有2种模式,队列式和发布-订阅式。队列,一条消息只有1个消费者处理。发布-订阅,消息广播给所有消费者,收到消息的消费者都可以来处理。

分区中的消息都被分了一个序列号,称之为偏移量(offset)。

消费者所持有的数据就是这个offset。这是由消费者自己设置的,这样就能读历史消息。

最多一次 --- 消息可能丢失,但绝不会重发。

至少一次 --- 消息绝不会丢失,但有可能重新发送。

正好一次 --- 每个消息传递一次且仅一次。

kafka默认是“至少一次”。通过禁止生产者重试实现 “最多一次”。通过偏移量实现“正好一次”。

kafka不会立即删除已消费的消息,具体什么时候删除是由Broker配置决定的。

版权申明:本文为博主原创文章,转载请保留原文链接及作者。

最新文章

  1. hdu2662
  2. c/c++连接mysql数据库
  3. C#调用java类、jar包方法(转)
  4. SVN Can't open file 'xxx':Premission denied
  5. Stack与Heap的区别
  6. Visual Studio 2008破解激活升级方法
  7. C++ 中复杂的声明
  8. Maven 的安装配置
  9. JavaScript 模块化加载
  10. hdu 1355 The Peanuts
  11. 【Java集合类】ArrayList详解 (JDK7)
  12. BZOJ 2752: [HAOI2012]高速公路(road) [线段树 期望]
  13. WIN7电脑文件莫名其妙被删除后的恢复
  14. IntelliJ IDEA maven 构建简单springmvc项目
  15. SQL注入之重新认识
  16. 异步与并行~CancellationTokenSource对线程的作用
  17. hive1.1.0安装
  18. git branch 命令查看分支、删除远程分支、本地分支
  19. 函数和常用模块【day04】: 总结(十二)
  20. eclipse svn插件 设置自动加锁相关

热门文章

  1. sql server 基本操作
  2. Eclipse 如何添加 更换字体(转载)
  3. 面试 Spring Boot 再也不怕了,答案都在这里!
  4. NIM游戏的Python实现
  5. 论文阅读笔记(二十一)【CVPR2017】:Deep Spatial-Temporal Fusion Network for Video-Based Person Re-Identification
  6. Uva1640(统计数字出现的次数)
  7. linux安装最新(任意)版本nodejs
  8. powerdesigner两数据库对比
  9. C#设计模式学习笔记:设计原则
  10. (int)、int.Parse()、int.TryParse()、Convert.ToInt32()区别