kafka企业级入门

1.kafka概述

什么是kafka?

kafka是一个消息系统,消息中间件,是一个高吞吐量的分布式发布订阅消息系统。

2.kafka角色介绍

broker:kafka集群包含一个或多个服务器,服务器即broker

topic:每条发布到kafka集群的消息都有一个类别,类别即topic

message:消息,由定长的消息头和变长的消息体组成

partition:partition是物理上的概念,每个topic包含一个或多个partition

producer:消息生产者,负责发布消息到kafka broker

consumer:每个consumer属于一个特定的consumer group。如果没有指定group name,则属于默认的group

consumer group:每一个消费者组,会选择一个broker作为协调者

3.kafka集群环境搭建:

集群主机规划

安装zookeeper集群

安装kafka集群

4.kafka生产者与消费者

生产者:

连接kafka集群地址

创建生产者主体

生产消息信息record

消费者:

配置地址信息

创建消费者主体

循环取消息

5.发送消息的三种方式:

同步阻塞发送

使用场景:发送消息不能出错,发送消息的顺序不能出错,不关心高吞吐量

异步发送(发送并忘记)

使用场景:发送消息不管会不会出错,发送消息错乱没有关系,只关心高吞吐量

异步发送(发送并回调)

使用场景:发送消息不能出错,但是我不关心消息的具体顺序

6.消息的存储和查询机制

topic:

每条发布到kafka集群的消息都有一个类别,该类别就是topic

partition:

partition是物理上的概念,每个topic包含一个或多个partition

每个分区由一系列有序的不可变的消息组成,是一个有序队列

每个分区在物理上是一个文件夹,分区命名规则:topicname-partitionId

分区目录下,存储该分区的日志段。包含一个数据文件和两个索引文件

每条消息被追加到对应的分区中,是顺序写磁盘。这也是kafka高吞吐量的重要保证

kafka是局部有序,即只保证一个分区内的消息顺序性,不保证全局有序

logSegment:

日志文件按照大小,或者时间滚动,切分成一个或者多个日志段(logSegment),日志段大小默认1gb

消息的查询:

根据文件存储的有序性,通过二分查找先找到文件,再找文件中具体的消息

7.三种数据发送策略

指定分区发送

不指定分区,没有key,轮询发送

不指定分区,有key,hash发送

8.消费者负载均衡策略

消费者与partition的对应关系:同一个分区的数据,只能被一个消费组中的一个消费者消费

9.Kafka如何保证消息的顺序性

问题:

比如说我们建了一个 topic,有三个 partition。生产者在写的时候,其实可以指定一个 key,比如说我们指定了某个订单 id 作为 key,那么这个订单相关的数据,一定会被分发到同一个 partition 中去,而且这个 partition 中的数据一定是有顺序的。
消费者从 partition 中取出来数据的时候,也一定是有顺序的。到这里,顺序还是 ok 的,没有错乱。接着,我们在消费者里可能会搞多个线程来并发处理消息。因为如果消费者是单线程消费处理,而处理比较耗时的话,比如处理一条消息耗时几十 ms,那么 1 秒钟只能处理几十条消息,这吞吐量太低了。而多个线程并发跑的话,顺序可能就乱掉了。

 

解决方案:

  • 一个 topic,一个 partition,一个 consumer,内部单线程消费,单线程吞吐量太低,一般不会用这个。
  • 写 N 个内存 queue,具有相同 key 的数据都到同一个内存 queue;然后对于 N 个线程,每个线程分别消费一个内存 queue 即可,这样就能保证顺序性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值