03-02-02 kafka

入门篇

使用场景

MQ基本功能

  • 生产者发送消息,消费者接收消息。(本质上是一个消息的传递)
  • 存储海量消息
  • 写多读少,应对高并发写

根据这些功能,可以实现的使用场景

  • 解耦:生产消息,其他服务根据需要进行消费,生产者无需关心消费者
  • 异步:生产消息,无需关心消费者具体的处理时间
  • 削峰填谷:设置消费者1s消费N条消息

引入MQ带来的问题

  • 系统可用性降低,MQ高可用问题
  • 系统复杂度提高
  • 数据一致性问题:数据丢失、数据重复、数据乱序

基本命令

# 基本命令:kafka-topics.sh、kafka-console-producer.sh、kafka-console-consumer.sh

# 创建Topic
kafka-topics.sh --create \
--zookeeper zoo1:2181 \ # 连接zookeeper
--partitions 3 \ # 分区数量
--replication-factor 3 \ # 副本数量
--topic test

# 列表所以Topic
kafka-topics.sh --list --zookeeper zoo1:2181

# 展示某个Topic的详细信息
kafka-topics.sh --describe --zookeeper zoo1:2181 --topic test

# 修改某个Topic的信息
kafka-topics.sh --zookeeper zoo1:2181 --alter --topic test --partitions 3

# 删除某个Topic
kafka-topics.sh --zookeeper zoo1:2181 --delete --topic test

#生产者
## https://blog.csdn.net/qq_29116427/article/details/105912397
kafka-console-producer.sh --broker-list kaf1:9092 --topic test
kafka-console-producer.sh --broker-list kaf1:9092 --property parse.key=true --property key.separator=: --topic test

# 消费者
## 新版关联zk这种方式已经删除
kafka-console-consumer.sh --bootstrap-server kaf1:9092 --topic test --from-beginning

基本概念
参考链接:https://www.jianshu.com/p/a036405f989c

来自:网络资源

高级篇

基本原理

问题解决

高可用

kafka天然高可用。对每个topic设置分区,分散存储在集群的不同节点上,应对某个topic的高并发。同时每个分区设置备份,避免单点故障。每个分区选举主节点,应对读写请求。

数据一致性

数据丢失

服务集群:设置Topic有N大于1个副本

生产者:设置acks=all, retries=max,表示只有当所有节点数据都同步了就确定提交,否则不断尝试

消费者:每一个都会有自己的offset,表示当前消费的位置,当且仅当消费万一条消息,采取提交offset。(kafka会自动提交一组消息的offset)

数据重复、幂等性

原因:

  1. 生产者自己提交了重复消息
  2. kafka消费者有个offset,会隔一段时间同步到zookeeper。如果还没有同步消费者宕机了,重启后会拉取zookeeper中的offset,继续读取。

解决幂等性问题,根据业务场景实际处理,比如:数据库唯一索引、根据主键等约束先查询下。

数据有序性

原因:

  1. 生产者:高并发发送消息,自己把顺序搞乱掉。这种情况解决不了,一定要避免
  2. 消费者:N个实例M个线程一起消费,导致没有根据消息顺序进行消费

解决:

  1. 首先从业务场景考虑,到底要不要有序,大部分都不关心有序。
  2. N个实例,采用消费者数量小于N的方案对消息进行Key存入分区,这样一个消费者获取相同的Key消息是有序的;每个服务有M个线程进行消费,采用内存队列quene,对于消息再细分,存入不同的消费队列中,每个消费队列是有序的。
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容

  • 前言 Kafka 是我在疫情期间在游戏之余学的。虽然之前用过 ActiveMQ 和 RabbitMQ,但是在 Ka...
    Guide哥阅读 589评论 0 0
  • 消息中间件的背景分析 场景分析 前面跟着我看过 zk 的源码,学过并发编程的同学应该知道,我们可以使用阻塞队列+线...
    悠娜的奶爸阅读 304评论 0 2
  • kafka kafka说说它的特性,客户端offset宕机后,同一个topic客户端能不能接上它消费? 不能,只能...
    赵镇阅读 495评论 0 0
  • Kafka是当前分布式系统中最流行的消息中间件之一,凭借着其高吞吐量的设计,在日志收集系统和消息系统的应用场景中深...
    Dali王阅读 422评论 0 0
  • 简介 ​ Kafka起初是由LinkedIn公司采用Scala语言开发的一个多分区、多副本且基于Zookeep...
    四夕_y阅读 829评论 0 1