kafka常用命令及概念总结,kafka学习三


在这里插入图片描述

简述:Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。主要应用场景是:日志收集系统和消息系统。

一、kafka shell 命令

使用的时候kafka2.11版本。
在这里插入图片描述
1 → 启动kafka
-daemon 代表后台运行方式

./bin/kafka-server-start.sh -daemon ./config/server.properties

2 → 停止kafka服务

./bin/kafka-server-stop.sh

3 → Topic管理

  1. 创建topic,创建一个topic名为kafka1

单机

./bin/kafka-topics.sh --create --zookeeper 192.168.211.137:2181 --replication-factor 3 \
--partitions 3 --topic kafka1

集群:

# 依赖zk创建
./bin/kafka-topics.sh --create --zookeeper 192.168.211.137:2181,192.168.211.139:2181,\
192.168.211.140:2181 --replication-factor 3 --partitions 2 --topic kafka1

# kafka自己创建
./kafka-topics.sh --bootstrap-server 192.168.211.137:9092,192.168.211.139:9092,192.168.211.140:9092 --create --topic tt_inform_event  --partitions 3 --replication-factor 2

参数解析:

  • replication-factor 3 创建3个副本
  • partitions 3 创建3个分区
  1. 查看所有topic列表
./bin/kafka-topics.sh --zookeeper ip:2181 --list
  1. 查看topic详情
./bin/kafka-topics.sh --zookeeper ip:2181 --describe --topic kafka1
  1. 删除topic
./bin/kafka-topics.sh --delete --zookeeper ip:2181 --topic kafka1
  1. 修改topic,将主题kafka1的分区数改为2个
./bin/kafka-topics.sh --alter --zookeeper localhost:2181 --partitions 2 --topic kafka1

4 → 生产消息

  1. 单机
./bin/kafka-console-producer.sh --broker-list ip:9092 --topic kafka1
  1. 集群
./bin/kafka-console-producer.sh --broker-list ip1:9092,ip2:9092,ip2:9092 --topic kafka1

5 → 消费消息

  1. 单机
# 不指定消费者组
./bin/kafka-console-consumer.sh --bootstrap-server ip:9092 --from-beginning --topic kafka1

# 指定消费者组
./bin/kafka-console-consumer.sh --bootstrap-server ip:9092 --from-beginning 
--topic kafka1 --group testGroup
  1. 集群
./bin/kafka-console-consumer.sh --bootstrap-server ip1:9092,ip2:9092,ip3:9092 \
--topic kafka1 --from-beginning

6 → 消费者组管理

  1. 查看consumer Group列表
./bin/kafka-consumer-groups.sh  --list  --bootstrap-server ip:9092
  1. 查看指定消费者组的消费情况
./bin/kafka-consumer-groups.sh --bootstrap-server ip:9092 --group test-1 --describe
  1. 删除消费者组
./bin/kafka-consumer-groups.sh --zookeeper ip:2181 --delete --group test-1

二、kafka术语解释

1 kafka是什么?

Kafka是一个分布式数据流平台,可以运行在单台服务器上,也可以在多台服务器上部署形成集群。它提供了发布和订阅功能,使用者可以发送数据到Kafka中,也可以从Kafka中读取数据。

能用来干什么?

  • 构造实时流数据管道,它可以在系统或应用之间可靠地获取数据。 (相当于message queue)
  • 构建实时流式应用程序,对这些流数据进行转换或者影响。 (流处理,通过kafka stream topic和topic之间内部进行变化)

kafka的体系结构:
在这里插入图片描述

2 Topic

主题,Kafka 中的消息都以主题为单位进行归类,生产者负责将消息发送到特定的主题(发送到 Kafka 集群中的每一条消息都要指定一个主题),消费者负责订阅主题并进行消费。比如应用程序A订阅了主题t1,应用程序B订阅了主题t2而没有订阅t1,那么发送到主题t1中的数据将只能被应用程序A读到,而不会被应用程序B读到。
图片来自kafka官网

3 Broker
一台kafka服务器就可以称之为broker,Kafka 集群由多个 Kafka 实例组成,每个kafka实例称为 broker,在集群中每个 broker 都有一个唯一的 brokerid ,不能重复。

4 Partition
分区,主题可以细分为多个分区,一个分区只属于一个topic,每个topic可以有一个或多个partition(分区)。物理上把topic分成一个或者多个分区,每一个分区是一个有序的队列。且每一个分区在物理上都对应着一个文件夹,该文件夹下存储这个分区所有消息和索引文件。Kafka使用分区支持物理上的并发写入和读取,从而大大提高了吞吐量。Kafka只保证一个分区的数据顺序发送给消费者,而不保证整个topic里多个分区之间的顺序.

5 Record
记录,实际写入Kafka中并可以被读取的消息记录,每个record包含了key、value和timestamp。

6 Producer
生产者,也就是发送消息的一方。生产者负责创建消息,然后将其发送到 Kafka 中。

7 Consumer
消费者,也就是接收消息的一方,用来读取Kafka中的数据。如图kafka消费者模型
图片来自kafka官网

8 Consumer Group
消费者组,一个消费者组可以包含一个或多个消费者。使用多分区+多消费者方式可以极大提高数据下游的处理速度。
consumer group是 Kafka 提供的可扩展且具有容错性的消费者机制。组内有着多个消费者,它们共享一个公共的 id,即 group id。组内的所有消费者协调在一起来消费订阅主题的所有分区,而且每个分区只能由同一个消费组内的一个消费者来消费。

9 Offest
Offset指的是Partition以及User Group而言,记录某个user group在某个partiton中当前已经消费到达的位置。

10 Replicas(副本)
每一个分区,根据复制因子N,会有N个副本,比如在broker1上有一个topic,分区为topic-1, 复制因子为2,那么在两个broker的数据目录里,就都有一个topic-1,其中一个是leader,一个replicas同一个Partition可能会有多个Replica,而这时需要在这些Replication之间选出一个Leader,Producer和Consumer只与这个Leader交互,其它Replica作为Follower从Leader中复制数据

三、 kafka为什么这么快

顺序读写
kafka的消息是不断追加到文件中的,这个特性使kafka可以充分利用磁盘的顺序读写性能,顺序读写不需要硬盘磁头的寻道时间,只需很少的扇区旋转时间,所以速度远快于随机读写。

零拷贝
服务器先将文件从复制到内核空间,再复制到用户空间,最后再复制到内核空间并通过网卡发送出去,而零拷贝则是直接从内核到内核再到网卡,省去了用户空间的复制,零拷贝对应的是Linux中sendfile函数,这个函数会接受一个offsize来确定从哪里开始读取。现实中,不可能将整个文件全部发给消费者,他通过消费者传递过来的偏移量来使用零拷贝读取指定内容的数据返回给消费者
分区
kafka中的topic中的内容可以被分为多分partition存在,每个partition又分为多个段segment,所以每次操作都是针对一小部分做操作,很轻便,并且增加并行操作的能力
批量发送
kafka允许进行批量发送消息,producter发送消息的时候,可以将消息缓存在本地,等到了固定条件发送到kafka,可以根据消息条数或者间隔时间作为发送条件。

数据压缩
Kafka还支持对消息集合进行压缩,Producer可以通过GZIP或Snappy格式对消息集合进行压缩。压缩的好处就是减少传输的数据量,减轻对网络传输的压力。Producer压缩之后,在Consumer需进行解压,虽然增加了CPU的工作,但在对大数据处理上,瓶颈在网络上而不是CPU,所以这个成本很值得

参考文档:kafka官方文档
参考书籍:深入理解Kafka:核心设计与实践原理

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高并发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值