在使用kafka时,有时候为验证应用程序,需要手动读取消息或者手动生成消息。这个时候可以借助kafka-console-consumer.sh和kafka-console-producer.sh 这两个工具,它们包装了java客户端,让用户不需要编写整个应用程序就可以与kafka主题发生交互。

生产者

kafka-console-consumer.sh工具可以用于向kafka主题写入消息。默认情况下,该工具将命令行的每一行视为一个消息,消息的键和值以tab字符分隔,如果没有出现table字符,那么键就是null。

控制台生产者有两个参数是必须指定的: --broker-list参数指定了一个或多个broker,它们以逗号峰,格式为hostname:port;另一个参数是--topic指定了生成消息的目标主题。在生成完消息之后,需要发送一个EOF字符来关闭客户端。

[root@test3 bin]# ./kafka-console-producer.sh --broker-list 10.0.102.204: --topic science
sample messsage

在控制台使用生产者也是可以指定配置文件的,有两种形式!

  • 通过--producer.config  configfile指定消费者的配置文件,其中configfile是配置文件的全路径。
  • 另一种方式是直接在命令行以--producer-property  key=value的格式传递一个或多个参数,key是参数名字,value是参数的值。

生产者有都许多命令行参数,可以调整其行为:

--key-serializer  classname:指定消息键的编码器的类名,默认是Kafka.serializer.DefaultEncoder.
--value-serializer classname: 指定消息值的编码器的类名,默认是Kafka.serializer.DefaultEncoder.
--compress-codec string:指定生成消息所使用的压缩类型,可以是none, gzip, snappy或lz4,默认是gzip。
--sync :指定以同步的方式生成消息,也就是说,在发送下一个消息之前会等待当前消息得到确认。

消费者控制台

kafka-console-consumer.sh工具提供了一种从一个或多个主题以上读取消息的方式。消息被打印在标准输出上,消息之间以空行分割。默认情况下,它会打印没有经过格式化的原始消息字节。它有很多可选参数,其中有一些参数是必选的。

第一:要指定是否使用新版本的消费者,并指定kafka集群的地址。如果使用的是旧版本的消费者,只需要提供--zookeeper参数。如果使用了新版本的消费者,必须使用--new-consumer和--borker-list, --borker-list后面需要跟上以逗号分割的broker地址列表。

第二:指定要读取的主题。有3个参数可以选择,分别是--topic, --whitelist和 --blacklist。此处运行只指定一个参数。--topic用于指定单个待读取的主题,--whitelist和 --blacklist后面跟着一个正则表达式(在命令行可能需要转义)。与白名单匹配的主题将会被读取,与黑名单匹配的主题不会被读取。

[root@test3 bin]# ./kafka-console-consumer.sh --zookeeper 10.0.102.204:  --topic science
test

除了基本的命令行参数外,也可以把消费者的其他的配置参数传递给控制台消费者。可以通过两种方式来达到这个目的。第一种方式将配置参数写在一个文件里,然后通过--consumer.config 指定配置文件。另一种是在命令行以--consumer-property  key=value的格式传递一个或多个参数,其中key指定参数的名字,value指定参数的值。这种方式在设置消费者属性时会很有用,比如设置群组的ID。

控制台消费者和控制台生产者有一个共同的参数--property,这个参数用于向消息格式化器传递配置信息,而不是给客户端本身传递配置信息。

控制台消费者常用的配置如下:

--formatter classname :指定消息格式化器的类名,用于解码消息,它的默认值是kafka.tools.DefaultFormatter.
--from-beginning: 指定从最旧的偏移量开始读取数据,否则就从最新的偏移量开始读取。
--max-messages num: 指定在退出之前最多读取NUM个消息
--partition num: 指定只读ID为num的分区(需要新版本的消费者) 消息格式器选项:
除了默认的消息格式器之外,还有其他3中可用的格式化器。
kafka.tools.loggingMessageFormatter: 将消息输出到日志,而不是输出到标准的输出设备。日志级别为INFO,并且包含了时间戳,键和值。
kafka.tools.ChecksumMessageFormatter: 只打印消息的校验和
kafka.tools.NoOpMessageFormatter: 读取消息但不打印消息 kafka.tools.DefaultFormatter有一些非常有用的配置选项,这些选项可以通过--property命令行参数指定。
print.timestamp: 设置为true, 就会打印每个消息的时间戳。
print.key :设置为true,除了打印消息的值外,还会打印消息的键。
key.separator: 指定打印消息的键和消息的值所用的分割符。
line.separator: 指定消息之间的分割符。
key.deserializer: 指定打印消息的键所用的发序列化器的类名。
value.deserializer: 指定打印消息的值所用的发序列化器的类名。

读取偏移量主题

【有点问题】

有时候,我们需要知道提交的消费者群组的偏移量是多少,比如某个特定的群组是否在提交偏移量,或者偏移量提交的频度。这个可以通过让控制台消费者读取一个特殊的内部主题__consumer_offsets来实现。所有消费者的偏移量都以消息的形式写到这个主题上。为了解码这个主题的消息,需要使用Kafka.coordinator.GroupMetadataManager$OffsetsMessageFormatter这个格式化器。

[root@test3 bin]# ./kafka-console-consumer.sh --zookeeper 10.0.102.204:  --topic __consumer_offsets --formatter "Kafka.coordinator.GroupMetadataManager$OffsetsMessageFormatter" --max-messages 

kafka生产者和消费者的更多相关文章

  1. [Spark][kafka]kafka 生产者,消费者 互动例子

    [Spark][kafka]kafka 生产者,消费者 互动例子 # pwd/usr/local/kafka_2.11-0.10.0.1/bin 创建topic:# ./kafka-topics.sh ...

  2. kafka生产者和消费者流程

    前言 根据源码分析kafka java客户端的生产者和消费者的流程. 基于zookeeper的旧消费者 kafka消费者从消费数据到关闭经历的流程. 由于3个核心线程 基于zookeeper的连接器监 ...

  3. kafka生产者和消费者api的简单使用

    kafka生产者和消费者api的简单使用 一.背景 二.需要实现的功能 1.生产者实现功能 1.KafkaProducer线程安全的,可以在多线程中使用. 2.消息发送的key和value的序列化 3 ...

  4. Kafka 生产者和消费者入门代码基础

    这篇博文讲解Kafka 的生产者和消费者实例. 基础版本一 生产者 ProducerFastStart.java package com.xingyun.tutorial_1; import org. ...

  5. kafka-python开发kafka生产者和消费者

    1.安装kafka-python 执行命令 pip install kafka-python kafka-python        1.4.6 2.编写python kafka 生产者消费者代码 # ...

  6. springboot配置kafka生产者和消费者详解

    在原有pom.xml依赖下新添加一下kafka依赖ar包 <!--kafka--> <dependency> <groupId>org.springframewor ...

  7. kafka生产者、消费者java示例

    1. 生产者 import java.util.Properties; import kafka.javaapi.producer.Producer; import kafka.producer.Ke ...

  8. kafka生产者与消费者的生产消息与消费消息所遇到的问题

    当我们用API写kafka的时候 生产者生产消息,但是消费者接收不到消息?集群上启动消费者显示生产的消息.我们需要修改一下配置 (1)我们打开在虚拟机中修改kafka集群的配置文件 [root@spa ...

  9. Kafka 生产者、消费者与分区的关系

    背景 最近和海康整数据对接, 需要将海康产生的结构化数据拿过来做二次识别. 基本的流程: 海康大数据 --> kafka server --> 平台 Kafka 的 topic 正常过车 ...

随机推荐

  1. Java Eclipse编译后产生的字节码文件,用DOS命令符怎么打开

    在很多初学者刚刚接触eclipse的时候,写完一个代码文件.例如 Demo.java 通过run as a java application生成之后,会产生一个Demo.class. Demo.cla ...

  2. stat命令的实现-mysate

    任务详情 学习使用stat(1),并用C语言实现 提交学习stat(1)的截图 man -k,grep -r的使用 伪代码 产品代码mystate.c,提交码云链接 测试代码,mysate与stat( ...

  3. sql中rownumber()over()的用法

    语法: ROW_NUMBER ( ) OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause ) 通过语法可以看出 o ...

  4. find a way to escape--hdu1593

    题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=1593 找到二者角速度相等时水中人的R,在此之前二者保持在一条直线上,之后水中的人沿直线到岸边S点匀 ...

  5. 理解CopyOnWriteArrayList

    CopyOnWriteArrayList,顾名思义,Write的时候总是要Copy,也就是说对于任何可变的操作(add.set.remove)都是伴随复制这个动作的 A thread-safe var ...

  6. 前端 HTML 简介

    HTML HTML是一个网页的主体部分,也是一个网页的基础.因为一个网页可以没有样式,可以没有交互,但是必须要有网页需要呈现的内容.所以HTML部分是整个前端的基础. HTML,全称是超文本标记语言( ...

  7. 前端 HTML 注释

    单行注释 <!--注释内容--> <!DOCTYPE html> <!-- 页面根节点开始--> <html lang="en"> ...

  8. 【深入理解javascript】this的用法

    引用:this的用法 在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了 情况1:构造函数 函数作为构造函数用,那么其中的this就代表它即将new出来的对象.另外 ...

  9. 【剑指offer】合并两个排序的链表

    一.题目: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 二.思路: 递归思想,首先判断一方为空的情况,一方为空则直接返回另一方.都不为空时,首先找到表 ...

  10. Jmeter CSV Data Set Config参数化

    在使用Jemeter做压力测试的时候,往往需要参数化用户名,密码以到达到多用户使用不同的用户名密码登录的目的.这个时候我们就可以使用CSV Data Set Config实现参数化登录: 首先通过Te ...