【Kafka】kafka中的基础概念和特性

1. 写在前面

开始学习Kafka。
学习理解一件事物,第一件事情是去理解在这个事物里面的相关概念,廓清了基础概念,你才能知道别人在谈论这件事物的哪一部分,这是很基础的学习方法。

2.概念列举

生产者、消费者和broker

Kafka是基于发布订阅的大吞吐量的消息系统。
一般消息系统可分为点对点的系统和发布订阅系统。

生产者是Kafka消息的产生者,可以是页面的点击行为,可以是某一笔交易的转账,可以是一个日志消息等等,任务你想异步的行为,都可以包装成一个消息,而产生这些消息的服务,都会调用Kafka的client来发送信息都Kafka的服务器。
BrokerKafka的boker也就是kafka的独立服务器,它接受来自生产者的消息,为消息的每个分区设置偏移量,并保存到磁盘中;为消费者提供服务,对消费者的读取行为做响应,并改变偏移量;除此之外还按照配置清除过期的消息等等。
消费者也就是发布订阅系统中的订阅者,消费者根据配置可以是单播或者组播模式,单播模式可以看成所有消费者在同一个群组;组播模式中,对于每个topic,同一个群组中又且仅有一个消费者会消费到该主题的消息,这极大的提升集群对消息的处理速度。

下面是kafka中消息在各角色中的流转关系。(我们假设kafka服务器数量和消息分区数量相等,即每台broker上保存着topic的一个集群,这样图会比较清楚)


Kafka消费者生产者和服务器的关系

由上图,绿色和红色分别代表着不同的topic。
流转过程是这样的:每个消费者都可能产生消息,并保存到kafka集群中的broker上的某个分区中,每个boker都会分担部分消息的存储工作,并维持着该分区的偏移量;对于每个消费者群组,群组中的总会有一台consumer在消费每个topic的消息,随着群组中消费者数量的扩容,群组对于消息的吞吐量也是不断增加的。

消息和批次

消息是Kafka中的最小数据单元,类比与“数据库”中的一条记录;消息由字节数组组成,Kafka没有具体的格式和定义,但是客户端提供的消息定义中有一组可选的数据单元:

public final class ProducerRecord<K, V> {
    private final String topic; //消息主题
    private final Integer partition; //消息分区
    private final K key; //消息的键
    private final V value; // 消息值
}

再以上的字段中,只有消息主题是必须的,标识这个消息的分类。
在分区中会具体讲一下消息的键的作用。

批次同我们常说的分批处理思想中的批次概念是一致的;从根本上来讲都是为了减少消耗,提升效率。
如果每一个产生一条消息,我们就写到网络中,会带来大量的开销,所以将消息分批次来传递;当然分批会带来延迟,这样就需要在延迟和吞吐量之间做一个权衡,Kafka提供参数来给开发者优化这种平衡。
单个批次消息越多,延迟越大,同时消息会被压缩,来提升数据的传输和存储能力,当然压缩更消耗CPU。
批次里面的消息都是属于同一个主题中的同一个分区,这样可以保证一次发送一批消息时的网络开销最小。

主题和分区

主题是消息的分类标识,类似与文件系统中的文件夹;
分区是一个主题的队列,同一个主题会包含若干分区,每一个分区都是一个提交记录,消息会被追加到分区中,在一个分区中保证顺序,已先入先出的顺序被消费。

分区和消费者关系

Kafka为每个分区中维护着一个偏移量,偏移量记录着当前分区的消费记录,偏移量保存在分布式协同服务器ZooKeeper上。

分区在Kafka中有着重要的意义,Kafka通过分区来实现数据冗余和主题的横向扩展;多个分区可以分布在不同的kafka服务端机器上,这使主题也可以横跨多个服务器存在,保证了分布式的能力;
在消息中讲到了消息的键,在消息没有配置键的时候,生产者会把消息均衡的写入到各个分区。当我们需要把特定的消息写入到固定的分区时,可以通过消息的键和分区器来实现,分区器会将键生成成散列值,并映射到各个分区上。

为了大量的消息能负载分散,要求主题的分区数要大于当前Kafka的broker服务器数量,这样才能保证所有每个broker能分担到消息的压力。在实际生产中,我们可以增加分区来给主题扩容,但是不能减少分区。

选定分区数量是一个需要经验的事情,需要考虑多个因素:
1.主题需要多大的吞吐
2.单个分区的最大吞吐量多少
3.每个broker上拥有的分区数量,这需要考量磁盘和网络带宽
4.单个分区上拥有的分区也不能太多,毕竟分区越多内存也越大,重新选举的时间也越长

需要注意的是,如果使用了消息的键来控制消息写入分区,那么增加主题时就需要慎重了,因为这会带来rehash的问题。

下一篇会带来Kafka的消费者和生产者详细介绍,以及一些常用的配置。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容