Kafka 基础概念:Message & Topic

What's kafka

kafka.jpg

What's kafka

  • Kafka 可以提供 MQ 功能:发布 & 订阅消息
  • Kafka 可以提供 stream processing 功能
  • Kafka 提供对 messages/ streams 的存储功能(通过配置,决定存储的 retention,当然,本质上我们不能把 Kafka 当成真正的存储系统来用)
  • Kafka 是 distributed system,搭建 cluster 来灵活动态的伸缩容

Kafka vs Messaging system

Kafka 是一个 MQ 系统,支持 publish & subscribe messages,就像 ActiveMQ, RabbitMQ,核心就是处理消息,提供 producer & consumer 的解耦。
Kafka 和普通 MQ 系统的真正不同在于它的 stream processing capabilities,可以通过该功能读取 streams & 动态的输出 streams。

Kafka vs RabbitMQ

  • RabbitMQ 不会存数据,没有消费者的话,msg 就丢了
  • RabbitMQ 支持灵活的 exchange 策略,Kafka 的 topic 不支持
  • Kafka 需要 Zookeeper 来管理 cluster,RabbitMQ 不需要
  • Kafka 对 Java 友好
  • Kafka 的社区活跃度比 RabbitMQ 高

Kafka vs Big data systems

Hadoop 支持大规模的 data 存储 & 周期性的处理文件数据
Kafka 侧重于提供实时、低延迟的大量 data 处理能力

Kafka vs ETL tools

ETL 的主要能力在于:从一个系统中获取到数据,插入到新的系统中。Kafka 也可以提供该能力。

Summary

Kafka 通过抽象数据流的概念,把以上三种类型系统的能力结合了起来。而 stream processing 正是 Kafka 的突出亮点。

Messages and Batches

Messages

kafka 中 message 是可以持久化一定时间的,但是不同的配置 (retention)会影响 messages 保留的时间长短。触发阈值时,消息会被删除。

retention 是针对 topic 来配置的,可以配置的项有两个:

  • log.retention.ms: Retention by time is performed by examining the last modified time (mtime) on each log segment file on disk.
  • log.retention.bytes: all retention is performed for an individual partition, not the topic.
    If you have specified a value for both log.retention.bytes and log.retention.ms (or another parameter for retention by time), messages may be removed when either criteria is met.

不同的业务场景对 message 丢失、重复、延迟的忍耐程度不同,需要使用不同的配置参数、不同的 API

Batches

Batches 是一组 messages。Batches 中的 messages 拥有相同的 topic and partition。
producer client 创建消息后,实际上会先缓存在本地的 buffer 中,等收集到一定量后,batches 发送给 broker。这种方式提升了效率,但导致了消息发送的延迟。可以根据业务需求,通过配置 batch 的 size 来调节延迟。

Serializer and deserializer

message 在网络间传递时,是需要 serialize 的,这时就需要有 serializer。

kafka 中有以下几种 serializer:

  • string serializer
  • Custom Serializer
  • Serializing Using Apache Avro

默认的 string serializer 不够灵活,custom serializer 又需要投入大量的时间开发,比较建议使用现成的 serializer 工具,如 Apache Avro。Avro 通过 schema 的概念很好的实现了 serialize & deserialize 的功能。schemas 存储在独立的 register 中。producer & consumer 都从 schema repository 中读取 schema 来达到自动更新两端的能力。


message registry.jpg

Topic

kafka 中的消息是按 topic 来组织的。可以把 topic 理解成数据库中 table 的概念。

Partitions

partition 是 topic scale 的重要手段,它跟存储系统中的分片是一个概念。topic split 成多个 partitions,topic 中的 messages 分布到不同的 partitions 中,平衡负载,提高写性能,同时通过增加 consumer group 中 consumers 的个数,达到提高读性能的目的。

kafka 可以保证单个 partition 上的 msg 是有序的,但是在各个 partition 间,是无法维持一个全局有序的。

如何决定消息落到哪个 partition 上:

  1. 不指定 message 的 partition & key 参数,根据 round-robin algorithm ,随机落到某个 partition
  2. 指定 message 的 key
    2.1 默认的 partitioner 对 key 应用一定的 hash 算法,来决定 partition 位置
    2.2 默认的 key partition 算法在某种业务场景下,会导致各个 partition 的数据量严重不平衡。根据业务场景自定义 partitioner,对 key 应用自定义的算法来分配 partition 位置
  3. 指定 partition,则忽略 key,直接按照配置的 partition 去存储消息

改变 topic 的 partition 个数后,相同 key 的 messages 在改变前后可能分配到不同的 partition 中,如果业务系统对此敏感,则建议:
1、初始时,估算好恰当的、足够大的 partitions
2、初始化后,尽量不改

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

推荐阅读更多精彩内容