【大数据平台】——基于Confluent的Kafka Rest API探索(二)

  • Kafka Rest Proxy特点与使用

  • Metadata

可以使用对相应URL的GET请求读取有关群集的大多数Metadata 信息,如:brokers, topics, partitions, configs等。

 

  • Producers

区别于Java Client,Kafka-rest不会对外公开Producer对象,而是通过一个Producers Pool来处理每一个生产消息的请求。

如此,Producer实例便是共享的了,也就是说无法通过每一个请求来配置Producer属性。但是可以通过修改Kafka Rest Proxy的配置文件来制定一个全局的Producer属性。默认的Producer全局属性如下:

producer.threads = 5

其余默认属性继承Kafka-Producer的默认属性,如果想配置的话使用前缀“producer.”+在kafka的producer.propertities里的key就可以了。

  • Consumers

Kafka Rest Prox使用High Level Consumer来实现消费topic的数据。每一个Consumer实例都是有状态(state)的并绑定给一个Topic。Offset提交可以是自动的,也可以由用户在请求中显式指定或提交。默认限制为每个 Consumer对应一个线程,可以使用Multiple Consumers来处理高吞吐量。

尽管不同于Producer实例,Consumer实例是不共享的,但仍然是底层服务才能操控的资源。通过API可以有限的修改一些配置,也可以通过修改Kafka Rest Proxy的配置文件来制定一个全局的Consumer属性。默认的Consumer全局属性如下:

consumer.request.max.bytes = 67108864
consumer.request.timeout.ms = 1000
consumer.threads = 1
simpleconsumer.pool.size.max = 25
consumer.instance.timeout.ms = 300000
consumer.iterator.backoff.ms = 50
consumer.iterator.timeout.ms = 1

其余默认属性继承Kafka-Consumer的默认属性,如果想配置的话使用前缀“consumer.”+在kafka的consumer.propertities里的key就可以了。

具体参数作用可参考

https://docs.confluent.io/2.0.0/kafka-rest/docs/config.html 

  • Multi-topic Produce Requests(研究中)

  • Multi-threaded Consumers(研究中)

  • API使用

通过HTTP的GET、POST请求实现,请求URL格式为

http:/ /<HOST> : <PORT> / [ option / option_value]

HOST是服务器IP,PORT是Kafka-rest的端口,本文配置的是8083。之后便是成对的 [ option / option_value],其中可用的option有:

Option

请求类型   

说明

topics

GET

option_value指定Topic。

option_value为空时用来获得所有Topic列表。

option_value不为空时用来获得指定Topic的metadata 信息

topics

POST

option_value指定Topic,向其发送消息。被发送的消息以特定的Json放在请求中。

partitions

GET

option_value指定Partition。

option_value为空时用来(结合topics/)获得指定Topic的分区表及分区信息。

option_value为不空时用来(结合topics/)获得指定Topic的指定分区的信息。

partitions

POST

option_value指定Partition,向指定分区发送消息

consumers

POST

option_value指定consumer_group

instances

POST

option_value指定instances_id

brokers

GET

option_value为空用来获得broker列表。

  • 基于CURL命令的API介绍

  • 获取Topic列表

CURL命令:

curl {HOST}:{PORT}/topics \
-X GET

Response JSON:

topics (array) – Topic名称列表
  • 获取Topic的metadata

CURL命令:

curl {HOST}:{PORT}/topics/{TOPIC_NAME} \
-X GET

 

Response JSON:

name (string) – 名称
configs (map) – 一系列的Topic配置参数
partitions (array) – 这个Topic的Partition列表
partitions[i].partition (int) – partition ID
partitions[i].leader (int) – partition的leader的 broker ID
partitions[i].replicas (array) – 备份列表
partitions[i].replicas[j].broker (array) – 备份所在broker ID 
partitions[i].replicas[j].leader (boolean) – 这个备份是否是leader 
partitions[i].replicas[j].in_sync (boolean) – 这个备份是否正在与leader同步
  • 向Topic发送消息

CURL命令:

curl {HOST}:{PORT}/topics/{TOPIC_NAME} \
-X POST \
-H "Content-Type:application/vnd.kafka.binary.v2+json" \
-d {DATA_JSON}

Data JSON:

key_schema (string) – 完整的schema字符串(非必须)
key_schema_id (int) – 注册schema时返回的ID(非必须)
value_schema (string) – 完整的schema字符串(非必须)
value_schema_id (int) – 注册schema时返回的ID(非必须)
records(array) – 发送的一系列记录
records[i].key (object) – 消息的Key用来分区的(非必须)
records[i].value (object) – 消息内容
records[i].partition (int) – 消息的目标分区(非必须)
注:*schema 和对应的*schema_id二者有一即可。

Response JSON:

offsets (object) – 目标分区的offset信息
offsets[i].partition (int) – 目标分区ID
offsets[i].offset (long) – 目标分区的offset
offsets[i].error_code (long) –此次发送的错误代码
offsets[i].error (string) – 此次发送的错误信息
  • 获取Toppic所有分区信息

CURL命令:

curl {HOST}:{PORT}/topics/{TOPIC_NAME}/partitions \
-X GET

Response JSON:

partition (int) – 分区ID
leader (int) –  分区 leader 的Broker ID
replicas (array) – 分区备份的Broker列表
replicas[i].broker (int) – Broker ID 
replicas[i].leader (boolean) – 是否是 leader
replicas[i].in_sync (boolean) – 是否正在同步
  • 获取Topic的指定分区信息

CURL命令:

curl {HOST}:{PORT}/topics/{TOPIC_NAME}/partitions/{PARTITION_ID} \
-X GET

Response JSON:

partition (int) – 分区ID
leader (int) –  分区 leader 的Broker ID
replicas (array) – 分区备份的Broker列表
replicas[i].broker (int) – Broker ID 
replicas[i].leader (boolean) – 是否是 leader
replicas[i].in_sync (boolean) – 是否正在同步
  • 向Topic指定分区发送消息

CURL命令:

curl {HOST}:{PORT}/topics/{TOPIC_NAME}/partitions/{PARTITION_ID} \
-X POST \
-H "Content-Type:application/vnd.kafka.binary.v2+json" \
-d {DATA_JSON}

Data JSON:

key_schema (string) – 完整的schema字符串(非必须)
key_schema_id (int) – 注册schema时返回的ID(非必须)
value_schema (string) – 完整的schema字符串(非必须)
value_schema_id (int) – 注册schema时返回的ID(非必须)
records(array) – 发送的一系列记录
records[i].key (object) – 消息的Key用来分区的(非必须)
records[i].value (object) – 消息内容
records[i].partition (int) – 消息的目标分区(非必须)
注:*schema 和对应的*schema_id二者有一即可。

Response JSON:

offsets (object) – 目标分区的offset信息
offsets[i].partition (int) – 目标分区ID
offsets[i].offset (long) – 目标分区的offset
offsets[i].error_code (long) –此次发送的错误代码
offsets[i].error (string) – 此次发送的错误信息
  • 从Topic指定分区消费消息

CURL命令:

curl {HOST}:{PORT}/topics/{TOPIC_NAME}/partitions/{PARTITION_ID}/messages?offset=(int)[&count=(int)]\
-X GET

查询参数:

offset (int) – 消费的起始Offset
count (int) – 消费数据条数. 默认是 1.

Response JSON:

key (string) – 消息的Key
value (string) – 消息的内容
partition (int) – 所属分区
offset (long) – 所在Offset
  • 注册一个Consumer

CURL命令:

curl {HOST}:{PORT}/consumers/{CONSUMER_GROUP_NAME} \
-X POST

Data JSON:

name (string) – Consumer名字
format (string) – 数据反序列化格式,有“binary”, “avro”, “json”. 默认“binary”.
auto.offset.reset (string) – 设置consumer的auto.offset.reset  
auto.commit.enable (string) – 设置consumer的auto.commit.enable
fetch.min.bytes (string) – 设置consumer的fetch.min.bytes 
consumer.request.timeout.ms (string) – 设置consumer的 consumer.request.timeout.ms

Response JSON:

instance_id (string) – 消费时使用的唯一ID
base_uri (string) – 用于构造针对此使用者实例的后续请求的URI
  •    手动提交Consumer的offsets

CURL命令:

curl {HOST}:{PORT}/consumers/{CONSUMER_GROUP_NAME}/instances/{CONSUMER_ID}/offsets \
-X POST 

Response JSON:

topic (string) – Topic名称
partition (int) – 提交的分区ID
consumed (long) – 最近消费的消息的offset
committed (long) – 刚刚提交的offset
  • 删除一个Consumer

CURL命令:

curl {HOST}:{PORT}/consumers/{CONSUMER_GROUP_NAME}/instances/{CONSUMER_ID} \
-X DELETE 
  • 使用一个Consumer消费数据

CURL命令

curl {HOST}:{PORT}/consumers/{CONSUMER_GROUP_NAME}/instances/{CONSUMER_ID}/topics/{TOPIC} \
-X GET 

Response JSON:

key (string) – 消息的Key
value (string) – 消息的内容
partition (int) – 所属分区
offset (long) – 所在Offset
  • Consumer订阅

CURL命令:

curl {HOST}:{PORT}/consumers/{CONSUMER_GROUP_NAME}/instances/{CONSUMER_ID}/subscription \
-X POST
-H "Content-Type:application/vnd.kafka.json.v2+json" \
-d {DATA_JSON}

 Data JSON:

topics(array) – 要订阅的Topic列表
  • Records接口消费

CURL命令:

curl {HOST}:{PORT}/consumers/{CONSUMER_GROUP_NAME}\
/instances/{CONSUMER_ID}/records \
-X GET 

 Response JSON:

topic(string) - 所在Topic
key (string) – 消息的Key
value (string) – 消息的内容
partition (int) – 所属分区
offset (long) – 所在Offset
  • 详细使用参考:

https://docs.confluent.io/2.0.0/kafka-rest/docs/api.html

  • Java 工具类(DEMO)

目前实现了简单的逐条发送、成批发送、创建消费者、消费 4个方法

https://github.com/zjw271208550/learn/tree/master/console/src/main/java/KafkaREST 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Confluent Kafka 是一个流数据平台,它基于 Apache Kafka 构建,旨在简化企业对流式数据的管理和处理。Confluent Kafka 提供了许多功能和工具,可以帮助开发人员和企业更好地利用 Kafka 进行数据流的处理和分析。 首先,Confluent Kafka 提供了一个集中式控制面板,帮助用户更好地管理 Kafka 集群和主题。用户可以通过该控制面板监控和管理集群的状态、配置和性能指标,从而更好地了解数据流的情况,并做出相应的调整和优化。 其次,Confluent Kafka 还提供了一系列的工具和库,简化了对 Kafka 的开发和集成。其中最重要的是 Confluent Schema Registry,它可以用来管理和存储数据的 Avro 或其他序列化格式的 schema,方便开发人员在消费和生产数据时进行 schema 的验证和转换。此外,Confluent Kafka 还提供了一些开发工具和客户端库,如 Kafka Connect、Kafka Streams 和 KSQL,使得开发人员可以轻松地构建和处理流式数据应用。 另外,Confluent Kafka 还提供了一些高级功能,如 Exactly Once 处理和事务支持。这些功能使得在处理高吞吐量的数据时,确保不会丢失和重复处理数据变得更加可靠和简单。 综上所述,Confluent Kafka 是一个强大而全面的流数据平台,通过提供丰富的功能和工具,帮助企业更好地管理和处理流式数据。无论是开发人员还是数据工程师,都可以利用 Confluent Kafka 的各种功能和工具,构建可靠和高效的实时数据处理系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值