白面系列 kafka
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配置决定的。
版权申明:本文为博主原创文章,转载请保留原文链接及作者。
最新文章
- hdu2662
- c/c++连接mysql数据库
- C#调用java类、jar包方法(转)
- SVN Can't open file 'xxx':Premission denied
- Stack与Heap的区别
- Visual Studio 2008破解激活升级方法
- C++ 中复杂的声明
- Maven 的安装配置
- JavaScript 模块化加载
- hdu 1355 The Peanuts
- 【Java集合类】ArrayList详解 (JDK7)
- BZOJ 2752: [HAOI2012]高速公路(road) [线段树 期望]
- WIN7电脑文件莫名其妙被删除后的恢复
- IntelliJ IDEA maven 构建简单springmvc项目
- SQL注入之重新认识
- 异步与并行~CancellationTokenSource对线程的作用
- hive1.1.0安装
- git branch 命令查看分支、删除远程分支、本地分支
- 函数和常用模块【day04】: 总结(十二)
- eclipse svn插件 设置自动加锁相关
热门文章
- sql server 基本操作
- Eclipse 如何添加 更换字体(转载)
- 面试 Spring Boot 再也不怕了,答案都在这里!
- NIM游戏的Python实现
- 论文阅读笔记(二十一)【CVPR2017】:Deep Spatial-Temporal Fusion Network for Video-Based Person Re-Identification
- Uva1640(统计数字出现的次数)
- linux安装最新(任意)版本nodejs
- powerdesigner两数据库对比
- C#设计模式学习笔记:设计原则
- (int)、int.Parse()、int.TryParse()、Convert.ToInt32()区别