kafka生产者和消费者
在使用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生产者和消费者的更多相关文章
- [Spark][kafka]kafka 生产者,消费者 互动例子
[Spark][kafka]kafka 生产者,消费者 互动例子 # pwd/usr/local/kafka_2.11-0.10.0.1/bin 创建topic:# ./kafka-topics.sh ...
- kafka生产者和消费者流程
前言 根据源码分析kafka java客户端的生产者和消费者的流程. 基于zookeeper的旧消费者 kafka消费者从消费数据到关闭经历的流程. 由于3个核心线程 基于zookeeper的连接器监 ...
- kafka生产者和消费者api的简单使用
kafka生产者和消费者api的简单使用 一.背景 二.需要实现的功能 1.生产者实现功能 1.KafkaProducer线程安全的,可以在多线程中使用. 2.消息发送的key和value的序列化 3 ...
- Kafka 生产者和消费者入门代码基础
这篇博文讲解Kafka 的生产者和消费者实例. 基础版本一 生产者 ProducerFastStart.java package com.xingyun.tutorial_1; import org. ...
- kafka-python开发kafka生产者和消费者
1.安装kafka-python 执行命令 pip install kafka-python kafka-python 1.4.6 2.编写python kafka 生产者消费者代码 # ...
- springboot配置kafka生产者和消费者详解
在原有pom.xml依赖下新添加一下kafka依赖ar包 <!--kafka--> <dependency> <groupId>org.springframewor ...
- kafka生产者、消费者java示例
1. 生产者 import java.util.Properties; import kafka.javaapi.producer.Producer; import kafka.producer.Ke ...
- kafka生产者与消费者的生产消息与消费消息所遇到的问题
当我们用API写kafka的时候 生产者生产消息,但是消费者接收不到消息?集群上启动消费者显示生产的消息.我们需要修改一下配置 (1)我们打开在虚拟机中修改kafka集群的配置文件 [root@spa ...
- Kafka 生产者、消费者与分区的关系
背景 最近和海康整数据对接, 需要将海康产生的结构化数据拿过来做二次识别. 基本的流程: 海康大数据 --> kafka server --> 平台 Kafka 的 topic 正常过车 ...
随机推荐
- JavaScript之prototype对象
简述prototype: 在js中,每个构造函数都有一个原型属性prototype,因为这个属性的值通常是一个对象,又叫原型对象!你不需要显式的去定义原型对象,因为每个构造函数都会一个原型属性,通常在 ...
- php curl常见错误:SSL错误、bool(false)
症状:php curl调用https出错 排查方法:在命令行中使用curl调用试试. 原因:服务器所在机房无法验证SSL证书. 解决办法:跳过SSL证书检查. curl_setopt($ch, CUR ...
- hdu4513完美队形II manacher
吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要 ...
- ASP.NET Web配置指南
利用ASP.NET,可以指定影响服务器上所有的Web应用程序.仅影响单个的应用程序.影响个别页面.或影响Web应用程序中的个别文件夹的配置设置.可以对编译器选项.调试.用户身份验证.错误消息显示.连接 ...
- Ubuntu 16.04配置国内高速apt-get更新源
https://www.linuxidc.com/Linux/2017-11/148627.htm Ubuntu 16.04下载软件速度有点慢,因为默认的是从国外下载软件,那就更换到国内比较好的快速更 ...
- 【python基础】字符串格式化(% VS format)
字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. 1.百分号方式 ...
- BFS广搜题目(转载)
BFS广搜题目有时间一个个做下来 2009-12-29 15:09 1574人阅读 评论(1) 收藏 举报 图形graphc优化存储游戏 有时间要去做做这些题目,所以从他人空间copy过来了,谢谢那位 ...
- JavaWeb 服务启动时,在后台启动加载一个线程
JavaWeb 服务启动时,在后台启动加载一个线程. 目前,我所掌握的一共有两种方法,第一种是监听(Listener),第二种是配置随项目启动而启动的Servlet. 下面对这两种方法做一简单的介绍, ...
- testng入门教程3用TestNG执行case的顺序
本教程介绍了TestNG中执行程序的方法,这意味着该方法被称为第一和一个接着.下面是执行程序的TestNG测试API的方法的例子. 创建一个Java类文件名TestngAnnotation.java在 ...
- 常用软件安装及VS插件工具
常用开发工具安装 开发环境 Visual Studio 2013 Microsoft SQL Server 2008 源代码管理 Git TortoiseGit GitScc Provider Cru ...