在使用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. 记一次centos7内核可能意外丢失(测试直接干掉)恢复方法

    本次是虚拟机装的centos7的内核不知原因以外丢失造成无法开机,开机显示找不到内核! 恢复方法: 挂载新的ISO文件,然后进入bios选择dvd启动. 启动后进入Troublesshooting,然 ...

  2. POJ2387-Till the cows come home【最短路】

    A - Til the Cows Come Home POJ - 2387 Bessie is out in the field and wants to get back to the barn t ...

  3. windows下gcc的安装

    首先打开 www.mingw.org .   www.mingw.org 直接点击右上方的 Download Installer 即可下载.   点击 Download Installer 进入下载页 ...

  4. wxWidgets与其他工具库的比较(上)

    本文是在wxWidgets Wiki上面找到的一篇,对比了wxWidgets和其他一些界面工具的特点.看到很多朋友在网上询问这些库各自的特点,我想先把这篇文章翻译出来——毕竟这也算是一篇官方的文章,应 ...

  5. table切换(自己写)

    <!DOCTYPE HTML><html> <head> <meta charset="utf-8"> <meta name= ...

  6. sql server 以10分钟分组 统计人数

    请问针对时间段从每天早上7点开始统计每十分钟人 解决思路: 我以前做过一个关于月份的,是说每3个月以分组,其实是一样的.不过可能啊,整体数据量大会有问题.如果你只是求一天的,那绝对没问题.[1]如果只 ...

  7. 8 jmeter之集合点

    集合点:集合点用以同步虚拟用户,以便恰好在同一时刻执行任务.在测试计划中,可能会要求系统能够承受1000 人同时提交数据,在LoadRunner 中可以通过在提交数据操作前面加入集合点,这样当虚拟用户 ...

  8. vue学习六之vuex

    由于状态零散地分布在许多组件和组件之间的交互中,大型应用复杂度也经常逐渐增长.为了解决这个问题,Vue 提供 vuex. 什么是Vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 ...

  9. oj1500(Message Flood)字典树

    大意:输入几个字符串,然后再输入几个字符串,看第一次输入的字符串有多少没有在后面的字符串中出现(后输入的字符串不一定出现在之前的字符串中) #include <stdio.h> #incl ...

  10. iOS学习之VFL语言简介

    什么是VFL语言 VFL(Visual Format Language),“可视化格式语言”. VFL是苹果公司为了简化autolayout的编码而推出的抽象语言. 语法说明 H:[cancelBut ...