专栏首页米虫的家BigData-消息队列框架Apache Kafka入门、原理解析

BigData-消息队列框架Apache Kafka入门、原理解析

Kafka–消息队列框架

1、Kafka 基础架构

1)Producer :消息生产者,就是向kafka broker发消息的客户端; 2)Consumer :消息消费者,向kafka broker取消息的客户端; 3)Consumer Group (CG):消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。 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。

2、 Kafka 命令行操作

0)启动kafka

shell

[root@hadoop102 kafka]$ /opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties

1)查看所有的topic

shell

[root@hadoop102 bin]$ kafka-topics.sh --list --zookeeper hadoop102:2181

2)创建topic

shell

[root@hadoop102 kafka]$ bin/kafka-topics.sh --zookeeper hadoop102:2181 --create --replication-factor 3 --partitions 1 --topic first

选项说明: --topic 定义topic名 --replication-factor 定义副本数 --partitions 定义分区数

3)删除

shell

[root@hadoop102 kafka]$ bin/kafka-topics.sh --zookeeper hadoop102:2181 --delete --topic first

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

4)发送消息

shell

[root@hadoop102 bin]$ kafka-console-producer.sh --broker-list hadoop102:9092 --topic first

5)消费消息

shell

[root@hadoop103 kafka]$ kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --from-beginning --topic first

--from-beginning:会把主题中以往所有的数据都读取出来。

6)查看某个topic详情

shell

[root@hadoop104 kafka]$ kafka-topics.sh --describe --topic first --zookeeper hadoop102:2181

7)修改分区

shell

[root@hadoop104 kafka]$ kafka-topics.sh --alter --topic first --zookeeper hadoop102:2181 --partitions 6

3、Kafka 工作流程

Kafka中消息是以topic进行分类的,生产者生产消息,消费者消费消息,都是面向topic的。 topic是逻辑上的概念,而partition是物理上的概念,每个partition对应于一个log文件,该log文件中存储的就是producer生产的数据。Producer生产的数据会被不断追加到该log文件末端,且每条数据都有自己的offset。消费者组中的每个消费者,都会实时记录自己消费到了哪个offset,以便出错恢复时,从上次的位置继续消费。

4、Kafka文件存储机制

由于生产者生产的消息会不断追加到log文件末尾,为防止log文件过大导致数据定位效率低下,Kafka采取了分片和索引机制,将每个partition分为多个segment。每个segment对应两个文件——“.index”文件和“.log”文件。这些文件位于一个文件夹下,该文件夹的命名规则为:topic名称+分区序号。例如,first这个topic有三个分区,则其对应的文件夹为first-0,first-1,first-2。

5、Kafka 生产者

1)分区原因:

  • (1) 方便在集群中扩展,每个 Partition 可以通过调整以适应它所在的机器,而一个 topic又可以有多个 Partition 组成,因此整个集群就可以适应任意大小的数据了;
  • (2) 可以提高并发,因为可以以 Partition 为单位读写了。

2)数据可靠保证

(1)ack

Topic的每个partition收到producer发送的数据后, 都需要向producer发送ackacknowledgement 确认收到),如果producer 收到 ack,就会进行下一轮的发送,否则重新发送数据。

(2)in-sync replica set (ISR)

Leader 维护了一个动态的 in-sync replica set (ISR),意为和 leader 保持同步的 follower 集合。当 ISR 中的 follower 完成数据的同步之后,leader 就会给 follower 发送 ack。如果follower长 时 间 未 向 leader 同 步 数 据 , 则 该 follower 将 被 踢 出 ISR , 该 时 间 阈 值 由replica.lag.time.max.ms 参数设定。Leader 发生故障之后,就会从 ISR 中选举新的 leader。

ack关系数据丢不丢失的问题,ISR关系数据一致性和存储问题

6、Kafka消费者

1)消费方式

消费者采用pull(拉)模式从broker中读取数据。 push(推)模式难以适应消费速率不同的消费者! 如果kafka没有数据,消费者可能陷入到循环中,一直返回空数据。

2)分配策略

  • RoundRobin
  • Range(默认的)

3)offset

下图是记录在zookeeper中的数据结构

7、kafka事务

1)Producer 事务

为了实现跨分区跨会话的事务,需要引入一个全局唯一的 Transaction ID(客户端给予的),并将 Producer获得的PIDTransaction ID绑定。这样当Producer重启后就可以通过正在进行的TransactionID 获得原来的 PID。 为了管理 Transaction,Kafka 引入了一个新的组件 Transaction Coordinator。Producer 就是通过和 Transaction Coordinator 交互获得 Transaction ID 对应的任务状态。TransactionCoordinator 还负责将事务所有写入 Kafka 的一个内部 Topic,这样即使整个服务重启,由于事务状态得到保存,进行中的事务状态可以得到恢复,从而继续进行。

2)Consumer

由于 Consumer 可以通过 offset 访问任意信息,而且不同的 Segment File 生命周期不同,同一事务的消息可能会出现重启后被删除的情况。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [大数据架构 ]Apache大数据项目目录

    在使用BigData大约8年以上之后,我遇到了大量的项目。Esp Apache的运动对于BigData域非常强大。每个人都会提出一个针对特定解决方案的项目。但是...

    首席架构师智库
  • 0471-Oracle Goldengate实时复制Oracle数据到CDH Kafka

    Oracle Goldengate(以下简称OGG)是业界广泛使用的准实时数据复制软件,主要基于数据库日志进行变更数据的抽取,也就是我们常说的CDC(chang...

    Fayson
  • 后端必备——数据通信知识(RPC、消息队列)一站式总结

    我自己总结的Java学习的系统知识点以及面试问题,目前已经开源,会一直完善下去,欢迎建议和指导欢迎Star: https://github.com/Snailc...

    用户2164320
  • 大数据技术学习路线指南

    要说当下IT行业什么最火?ABC无出其右。所谓ABC者,AI + Big Data + Cloud也,即人工智能、大数据和云计算(云平台)。每个领域目前都有行业...

    用户2292346
  • 实时数仓|架构设计与技术选型

    当我们做一个项目时往往都需要选择该用什么技术。这一部分不是我们普通员工想的,而是架构师会根据客户的需求选择出合适的技术。当选择合适的技术会让...

    大数据老哥
  • 分布式消息系统之Kafka入门

    在大数据学习当中,重点之一就是大数据技术框架,针对于大数据处理的不同环节,需要不同的技术框架来解决问题。以Kafka来说,主要就是针对于实时消息处理,在大数据平...

    成都加米谷大数据
  • 开源半个月收获接近 1k Star!你需要的开源项目都在这里!

    半个月前,我开源了awesome-java ,这是一个 Github 上非常棒的 Java 开源项目集合。是的!就是下面这个这么骚的图标!

    Guide哥
  • 如何全方位掌握 Kafka 核心技术?

    毋庸置疑,目前 Apache Kafka 是整个消息引擎领域的执牛耳者,也是大数据生态圈中颇为重量级的一员。从最早诞生于 LinkedIn 的“分布式消息系统”...

    芋道源码
  • 2019精炼的大数据技术学习路线

    近年来大数据BigData、人工智能AI、物联网Iot等行业发展迅猛,很多人都想要从事大数据技术开发工作,但是,请问要怎么做,路线是什么?从哪里开始学?学哪些?...

    用户2292346
  • Kafka快速入门系列(1) | Kafka的简单介绍(一文令你快速了解Kafka)

      自Flume快速入门系列结束后,博主决定后面几篇博客为大家带来关于Kafka的知识分享作为快速入门Kafka系列的第一篇博客,本篇为大家带来的是Kafka的...

    不温卜火
  • kafka stream简要分析

    kafka历史背景 Kafka是2010年Kafka是Linkedin于2010年12月份开源的消息系统,我接触的不算早,大概14年的时候,可以看看我们14年写...

    大数据和云计算技术
  • 快速入门Kafka系列(1)——消息队列,Kafka基本介绍

    自Redis快速入门系列结束后,博主决定后面几篇博客为大家带来关于Kafka的知识分享~作为快速入门Kafka系列的第一篇博客,本篇为大家带来的...

    大数据梦想家
  • 【阵容扩大】3位腾讯Maintainer 加入 Apache Pulsar生态项目RocketMQ-on-Pulsar

    ? ? 导读 近期,腾讯联合 StreamNative 开源 Apache 软件基金会顶级项目、分布式消息流平台 Apache Pulsar 生态项目RoP ...

    腾讯云中间件团队
  • 消息中间件系列第2讲:如何进行消息队列选型?

    要做技术选型,那么必须对现今的各个消息中间件有个深入的理解才能做技术选型。否则别人问你,你为什么要用这个消息中间件,你说不出个所以然来,怎么做架构师呢?

    陈树义
  • 消息传输模型的思考

    在P2P模型中,有几个关键术语:消息队列(Queue)、发送者(Sender)、接收者(Receiver)。每个消息都被发送到一个特定的队列,接收者从队列中获取...

    AWeiLoveAndroid
  • Kafka及周边深度了解

    文章有点长,但是写的都挺直白的,慢慢看下来还是比较容易看懂,从Kafka的大体简介到Kafka的周边产品比较,再到Kafka与Zookeeper的关系,进一步理...

    别打名名
  • Apache Kafka:下一代分布式消息系统

    Apache Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一种快速、可扩展的、设计内在...

    Java后端技术
  • 教程|运输IoT中的Kafka

    本教程介绍了Apache Kafka的核心概念及其在可靠性、可伸缩性、持久性和性能至关重要的环境中所扮演的角色。

    大数据杂货铺
  • 开源界的盛会来啦!要错过了解腾讯Apache生态最佳实践的机会吗?

    ? 8月,一场盛夏的技术盛宴将要来啦!这就是ApacheCon Asia。作为开源界备受关注的会议之一,今年大会将持续3天,开设14+分论坛,内容覆盖从大数据...

    腾源会

扫码关注云+社区

领取腾讯云代金券