一、常见术语
- broker:kafka集群包括一个或多个服务器,这种服务器叫做broker。broker接受来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。broker为消费者提供服务,对读取分区的请求作出相应,返回已经提交到磁盘上的信息。
- topic(主题):每条发布到kafka的消息都有一个类别,这个类别叫做topic。topic就好比数据库的表或者文件系统中的文件夹。一个主题可以分为多个分区,一个分区就是一个提交日志。消息以追加的方式写入分区,然后以先入先出的顺序读取。注意,由于一个主题可以多个分区,因此无法在整个主题范围内保证消息的顺序,但可以保证消息在单个分区内的顺序。其实就是队列存储。
- message(消息):kafka的数据单元。
- 批次:就是一组消息,这些消息属于同一个主题和分区。为了提高效率,消息被分批次写入kafka。
- partition(分区):物理上的概念,一个topic通常有多个partition,类似队列。提高读写的并发。
- offset(偏移量):一种元数据,它是一个不断递增的整数值,在创建消息时,kafka会把它添加到消息里。kafka为每条在分区的消息保存这个offset,这也是消费者在分区的位置。比如一个偏移量为10的消费者,表示它已经消费了0-9偏移量的消息,下一个要消费的消息是偏移量为10的。kafka 0.9版本之前存在zookeeper,0.9之后存在kafka。
- producer(生产者):消息的生产者,负责发送指定topic的消息到broker。默认情况下把消息均衡地分布到主题的所有分区上。
- consumer(消费者):消息读取客户端,通过订阅一组topic的消息从broker拉取消息
- consumer group(消费者群组):消费者是消费者群组的一部分,就是说,会有一个或者多个消费者共同读取一个topic。群组保证每个分区只能被一个消费者使用。可以为消费者指定group name,若不指定则属于默认的group。
- rebalance(重平衡):消费者组内某个消费者实例挂了之后,其它消费者实例自动重新分配订阅主题分区的过程。rebalance是kafka消费端实现高可用的重要手段。
二、启动zookeeper
bin/zookeeper-server-start.sh config/zookeeper.properties &
三、启动kafka
bin/kafka-server-start.sh config/server.properties
四、kafka生产者
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test_topic
producer参数:
参数 | 值类型 | 说明 | 有效值 |
--bootstrap-server | String | 要连接的服务器(kafka_2.12-2.5.0版本后加入的) 必需(除非指定--broker-list) | 形如:host1:prot1,host2:prot2 |
--topic | String | (必需)接收消息的主题名称 | |
--broker-list | String | (kafka_2.12-2.5.0版本前)要连接的服务器 | 形如:host1:prot1,host2:prot2 |
--batch-size | Integer | 单个批处理中发送的消息数 | 200(默认值) |
--compression-codec | String | 压缩编解码器 | none、gzip(默认值)snappy、lz4、zstd |
--max-block-ms | Long | 在发送请求期间,生产者将阻止的最长时间 | 60000(默认值) |
--max-memory-bytes | Long | 生产者用来缓冲等待发送到服务器的总内存 | 33554432(默认值) |
--max-partition-memory-bytes | Long | 为分区分配的缓冲区大小 | 16384 |
--message-send-max-retries | Integer | 最大的重试发送次数 | 3 |
--metadata-expiry-ms | Long | 强制更新元数据的时间阈值(ms) | 300000 |
--producer-property | String | 将自定义属性传递给生成器的机制 | 形如:key=value |
--producer.config | String | 生产者配置属性文件 [--producer-property]优先于此配置 | 配置文件完整路径 |
--property | String | 自定义消息读取器 | parse.key=true|false key.separator=<key.separator> ignore.error=true|false |
--request-required-acks | String | 生产者请求的确认方式 | 0、1(默认值)、all |
--request-timeout-ms | Integer | 生产者请求的确认超时时间 | 1500(默认值) |
--retry-backoff-ms | Integer | 生产者重试前,刷新元数据的等待时间阈值 | 100(默认值) |
--socket-buffer-size | Integer | TCP接收缓冲大小 | 102400(默认值) |
--timeout | Integer | 消息排队异步等待处理的时间阈值 | 1000(默认值) |
--sync | 同步发送消息 | ||
--version | 显示 Kafka 版本 不配合其他参数时,显示为本地Kafka版本 | ||
--help | 打印帮助信息 |
五、kafka消费者
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test_topic --from-beginning
consumer参数:
参数 | 值类型 | 说明 | 有效值 |
--topic | string | 被消费的topic | |
--whitelist | string | 正则表达式,指定要包含以供使用的主题的白名单 | |
--partition | integer | 指定分区 除非指定’–offset’,否则从分区结束(latest)开始消费 | |
--offset | string | 执行消费的起始offset位置 默认值:latest | latest earliest <offset> |
--consumer-property | string | 将用户定义的属性以key=value的形式传递给使用者 | |
--consumer.config | string | 消费者配置属性文件 请注意,[consumer-property]优先于此配置 | |
--formatter | string | 用于格式化kafka消息以供显示的类的名称 默认值:kafka.tools.DefaultMessageFormatter | kafka.tools.DefaultMessageFormatter kafka.tools.LoggingMessageFormatter kafka.tools.NoOpMessageFormatter kafka.tools.ChecksumMessageFormatter |
--property | string | 初始化消息格式化程序的属性 | print.timestamp=true|false print.key=true|false print.value=true|false key.separator=<key.separator> line.separator=<line.separator> key.deserializer=<key.deserializer> value.deserializer=<value.deserializer> |
--from-beginning | 从存在的最早消息开始,而不是从最新消息开始 | ||
--max-messages | integer | 消费的最大数据量,若不指定,则持续消费下去 | |
--timeout-ms | integer | 在指定时间间隔内没有消息可用时退出 | |
--skip-message-on-error | 如果处理消息时出错,请跳过它而不是暂停 | ||
--bootstrap-server | string | 必需(除非使用旧版本的消费者),要连接的服务器 | |
--key-deserializer | string | ||
--value-deserializer | string | ||
--enable-systest-events | 除记录消费的消息外,还记录消费者的生命周期 (用于系统测试) | ||
--isolation-level | string | 设置为read_committed以过滤掉未提交的事务性消息 设置为read_uncommitted以读取所有消息 默认值:read_uncommitted | |
--group | string | 指定消费者所属组的ID | |
--blacklist | string | 要从消费中排除的主题黑名单 | |
--csv-reporter-enabled | 如果设置,将启用csv metrics报告器 | ||
--delete-consumer-offsets | 如果指定,则启动时删除zookeeper中的消费者信息 | ||
--metrics-dir | string | 输出csv度量值 需与[csv-reporter-enable]配合使用 | |
--zookeeper | string | 必需(仅当使用旧的使用者时)连接zookeeper的字符串。 可以给出多个URL以允许故障转移 |
六、常用命令
1、启动kafka服务
bin/kafka-server-start.sh config/server.properties &
2、停止kafka服务
./kafka-server-stop.sh
3、查看所有的话题
./kafka-topics.sh --list --zookeeper localhost:2181
./kafka-topics.sh --list --zookeeper localhost:2181/kafka2 #当zk管理多套kafka集群的时候,要指定具体的kafka集群,否则查的就是默认的那个
4、查看所有话题的详细信息
./kafka-topics.sh --zookeeper localhost:2181 --describe
5、列出指定话题的详细信息
./kafka-topics.sh --zookeeper localhost:2181 --describe --topic demo
6、删除一个话题
./kafka-topics.sh --zookeeper localhost:2181 --delete --topic test
7、创建一个叫test的话题,有两个分区,每个分区3个副本
./kafka-topics.sh --zookeeper localhost:2181 --create --topic test --replication-factor 3 --partitions 2
8、测试kafka发送和接收消息(启动两个终端)
#发送消息(注意端口号为配置文件里面的端口号)
./kafka-console-producer.sh --broker-list localhost:9092 --topic test
#消费消息(可能端口号与配置文件保持一致,或与发送端口保持一致)
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning #加了--from-beginning 重头消费所有的消息
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test #不加--from-beginning 从最新的一条消息开始消费
9、查看某个topic对应的消息数量
./kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic test --time -1
10、显示所有消费者
./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list
11、获取正在消费的topic(console-consumer-63307)的group的offset
./kafka-consumer-groups.sh --describe --group console-consumer-63307 --bootstrap-server localhost:9092
12、显示消费者
./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list
参考:https://blog.csdn.net/qq_29116427/article/details/80206125
https://www.cnblogs.com/liyuanhong/p/12345751.html