【Kafka 实战】01 kafka 入门篇

一、背景

今天是11月12号,昨天双11,一个特殊的日子,昨天大家集体购物,此时产生了一个问题,上亿的人同时下单,各大电商是如何在此时处理上亿的订单呢?

当上亿客户下单,将产生大量的订单(消息),此时订单已经写入了数据库,但是后台处理能力有限,不能及时处理上亿级的订单,于是后台告诉用户一个假象,你已经下单成功,但其实用户的下单信息被缓存到了消息队列,后台再从消息队列中获取订单,对订单进行处理 。——异步通信

二、kafka   

 Kafka 是一个分布式消息发布订阅系统,(消息队列MQ)主要应用于 大数据实时处理领域。

1)kafka是一个消息队列,队列的特点是先进先出,可作为缓冲机制,解决生产速度大于消费速度的问题。

2)异步处理机制:不立即处理消息,什么时候需要处理在进行处理

3)消息备份,不会随着部分系统挂掉而产生消息丢失。

三、消息队列的两种模式

点对点模式,又叫 消息队列模型(一个生产者,一个消费者,消费者收到消息后,消息删除)  只能有一个生产者和一个消费者。

发布/订阅模式,有了主题(topic)的概念,这个模型可能存在多个发布者(Publisher),多个发布者向相同的主题发送消息,而订阅者(Subscriber)也可能存在多个,它们都能接收到相同主题的消息。生活中的报纸订阅就是一种典型的发布 / 订阅模型。

 

三、kafka架构

1)Producer  : 发消息的客户端;向队列尾推送消息

2)Consumer  :消费消息的客户端;从队首取消息。

3)Consumer Group (CG):消费者组,由多个consumer组成。
一个分区只能由一个组内消费者消费;消费者组之间互不影响。
消费者组里面的不同消费者不可以消费同一个消息,也就同一个topic,消费者组提高了消费速率)
消费者组我们可以作为一个大的消费群体(一家人),里面的各个小的消费者不可能消费同一个消息,这样效率太低。
好比一个家庭里面的成员采购物品,不能采购相同的物品一样。
所以我们有一个这样的结论,一个消费者组里面的消费者个数不得多于主题的个数。

4)Broker  :一台kafka服务器就是一个broker。一个集群由多个broker 组成。一个broker
有多个topic。

5)Topic :可以理解为一个队列,生产者和消费者面向同一个 topic; 
消息队列可能有很多消息,但是不是每一个消息消费者都要去获取,所以生产者生产消息后,给消息命名,
也就是主题名,消费者根据主题去拿自己的消息。我们可以把主题当成一个小的消息队列。

6)Partition:一个大的 topic 可以分布到多个 broker(即服务器)上,
 一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列。

7)Replica:副本,为保证集群中的某个节点发生故障时,该节点上的 partition 数据不丢失。
且 kafka 仍然能够继续工作,kafka 提供了副本机制,一个 topic 的每个分区都有若干个副本,一个 leader 和若干个 follower。 

8)leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是leader。

9)follower:每个分区多个副本中的“从”,实时从leader中同步数据,保持和leader数据的同步。
leader 发生故障时,某个follower会成为新的follower。

四、kafka工作流程 

   三台服务器broker0 broker1 broker2 三台服务器,搭建了一个kafka集群,且创建了一个主题为TopicA消息,对该消息进行了两次备份(leader 和 follower),且备份的分区不可能和被备份的在一个服务器上,这样备份也就没有意义了。备份主题需要不断地同步产生的消息。每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。

    假如生产者生产消息,同一个主题的消息被切分为三份,存入到不同的分区(疑问:分区存消息是按照哪种规则去存的呢?),存入的消息肯定是一致的,先生产谁,就先存入谁,但是消费者取出消息则需要从不同的三个分区去取,那应该是先从哪个分区去取呢,所以存入消息的顺序是一致的,取出消息的顺序就可能不一致。后面博客我们将持续分享kafka的生产分区侧率,以及消费者的消费策略。

五、kafka命令操作

  创建主题——创建一个名为“first” 的topic 副本个数是2  分区数是1

bin/kafka-topics.sh --create --zookeeper 192.168.60.72:2181 --replication-factor 2 --partitions 1 --topic first

 删除主题(需要 server.properties 中设置 delete.topic.enable=true 否则只是标记删除)

bin/kafka-topics.sh --delete --zookeeper 192.168.60.72:2181 --topic first

查看主题详情

bin/kafka-topics.sh --describe --topic first --zookeeper 192.168.60.72:2181

查看当前服务器topic

bin/kafka-topics.sh --zookeeper 192.168.60.72:2181 --list

发送消息

bin/kafka-console-producer.sh --broker-list 192.168.60.72:9092 --topic first
This is a message
This is another message

接收消息

bin/kafka-console-consumer.sh --bootstrap-server 192.168.60.72:9092 --topic first --from-beginning
This is a message
This is another message

配置环境变量

[atguigu@hadoop102 module]$ sudo vi /etc/profile
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka 
export PATH=$PATH:$KAFKA_HOME/bin

查看kafka进程

ps -ef | grep kafka

上一篇:搭建kafka集群 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值