09-Kafka应用

Kafka应用

  • 关于Kafka的应用类工具

Kafka系列文章是基于:深入理解Kafka:核心设计与实践原理一书,结合自己的部分实践和总结。

一、命令行工具

脚本名称作用
kafka-consumer-groups.sh消费者组信息管理
kafka-delete-records.sh消息删除功能

1.1 消费组管理

  • 展示消费者分组:./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list
bash-4.4# ./kafka-consumer-groups.sh --bootstrap-server  localhost:9092 --list
Note: This will not show information about old Zookeeper-based consumers.
anonymous.0b68eb1e-bebf-401b-8bbc-081200680ea3
groupID
anonymous.3e8a0f81-5742-4584-be2b-00ee3ec36ba3
ifaas-engine
kafka-group
ifaas-collection
ifaas-target
anonymous.3c0c3b13-9d41-4d8e-931a-e15f80a5aa27
ifaas-data
send-pg
anonymous.e94c8a4f-121d-4470-9e6b-65f9f1fdbbb3
  • 展示特定的消费者分组信息:./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group ifaas-data
bash-4.4# ./kafka-consumer-groups.sh --bootstrap-server  localhost:9092 --describe --group ifaas-data
Note: This will not show information about old Zookeeper-based consumers.

TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID                                      HOST            CLIENT-ID
engine-alarm    0          0               0               0               consumer-6-10bfc412-bdb2-454d-bcf9-438c0b40ea12  /192.168.89.193 consumer-6
ifaas-target    0          439706          439706          0               consumer-10-b84ab303-799e-4e6f-9457-c78bc234ac88 /192.168.89.193 consumer-10
all-user-record 0          588             588             0               consumer-8-43146cd4-3f90-4486-9277-b683691bacc1  /192.168.89.193 consumer-8
engine-image    0          0               0               0               consumer-2-f424478d-fc03-427c-b58b-f42fbdc382c7  /192.168.89.193 consumer-2
engine-face     0          0               0               0               consumer-4-ca15bc03-3a8c-4258-a299-069b55cecaa4  /192.168.89.193 consumer-4
ifaas-image     0          389082          389082          0               consumer-12-ba173a0a-9db4-4454-9678-8c152c36c19c /192.168.89.193 consumer-12

TOPIC:主题名称
PARTITION:分区编号
CURRENT-OFFSET:消费者组最新提交的消费位移
LOG-END-OFFSET:HW,即高水位,是消费者可见的最大offset
LAG:消息滞后数量,LOG-END-OFFSET和CURRENT-OFFSET的差值
CONSUMER-ID:消费者组的成员id
HOST:消费者的host信息
CLIENT-ID:消费者客户端的client.id
  • 展示特定的消费者分组的状态:./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group ifaas-data --state
bash-4.4# ./kafka-consumer-groups.sh --bootstrap-server  localhost:9092 --describe --group ifaas-data --state
Note: This will not show information about old Zookeeper-based consumers.

COORDINATOR (ID)          ASSIGNMENT-STRATEGY       STATE                #MEMBERS
192.168.89.193:9092 (1)   range                     Stable               6

Stable是正常情况的状态,其他状态值有:Dead、Empty(组内没有消费者)、PreparingRebalance和CompletingRebalance
  • 罗列消费者组内成员信息:./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group ifaas-data --members
bash-4.4# ./kafka-consumer-groups.sh --bootstrap-server  localhost:9092 --describe --group ifaas-data --members
Note: This will not show information about old Zookeeper-based consumers.

CONSUMER-ID                                      HOST            CLIENT-ID       #PARTITIONS     
consumer-6-10bfc412-bdb2-454d-bcf9-438c0b40ea12  /192.168.89.193 consumer-6      1               
consumer-10-b84ab303-799e-4e6f-9457-c78bc234ac88 /192.168.89.193 consumer-10     1               
consumer-8-43146cd4-3f90-4486-9277-b683691bacc1  /192.168.89.193 consumer-8      1               
consumer-2-f424478d-fc03-427c-b58b-f42fbdc382c7  /192.168.89.193 consumer-2      1               
consumer-4-ca15bc03-3a8c-4258-a299-069b55cecaa4  /192.168.89.193 consumer-4      1               
consumer-12-ba173a0a-9db4-4454-9678-8c152c36c19c /192.168.89.193 consumer-12     1  
  • 罗列消费者组内成员信息,并且展示成员的分区分配情况:./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group ifaas-data --members --verbose
bash-4.4# ./kafka-consumer-groups.sh --bootstrap-server  localhost:9092 --describe --group ifaas-data --members --verbose
Note: This will not show information about old Zookeeper-based consumers.

CONSUMER-ID                                      HOST            CLIENT-ID       #PARTITIONS     ASSIGNMENT
consumer-6-10bfc412-bdb2-454d-bcf9-438c0b40ea12  /192.168.89.193 consumer-6      1               engine-alarm(0)
consumer-10-b84ab303-799e-4e6f-9457-c78bc234ac88 /192.168.89.193 consumer-10     1               ifaas-target(0)
consumer-8-43146cd4-3f90-4486-9277-b683691bacc1  /192.168.89.193 consumer-8      1               all-user-record(0)
consumer-2-f424478d-fc03-427c-b58b-f42fbdc382c7  /192.168.89.193 consumer-2      1               engine-image(0)
consumer-4-ca15bc03-3a8c-4258-a299-069b55cecaa4  /192.168.89.193 consumer-4      1               engine-face(0)
consumer-12-ba173a0a-9db4-4454-9678-8c152c36c19c /192.168.89.193 consumer-12     1               ifaas-image(0)

  • 删除消费者分组,不过组内有消费者正常工作时,删除操作会失败。
./kafka-consumer-groups.sh --bootstrap-server  localhost:9092 --delete --group ifaas-data  

1.2 消费偏移管理

  • kafka-consumer-groups.sh可以重置消费者分组的offset为0,不过需要在分组内没有运行的消费者成员时执行才能有效。
//全部主题重置为最小offset
./kafka-consumer-groups.sh --bootstrap-server  localhost:9092 --group ifaas-data  --all-topics --reset-offsets --to-earliest --execute
//指定主题分区重置为最大offset
./kafka-consumer-groups.sh --bootstrap-server  localhost:9092 --group ifaas-data  --topics  topicName:1  --reset-offsets --to-latest --execute

  • 除了最早最晚,还能支持更细粒度的偏移量重置,比如调整到距离当前时间指定时间间隔处或者指定offset处

在这里插入图片描述

  • 另外kafka-consumer-groups.sh还支持将某些位移调整方案打印出来但是不支持(不使用–execute,使用dry-run/export),可用阅读参考文章[1]的9.1.2小节。

1.3 手动删除消息

  • kafka-delete-records.sh提供消息删除相关功能

  • 删除方式:./kafka-delete-records.sh --bootstrap-server localhost:9092 --offset-json-file delete.json

./kafka-delete-records.sh --bootstrap-server  localhost:9092 --offset-json-file delete.json

//delete.json ;表示将topic-1的0号分区offset为10,1号分区offset为100的消息删除掉,当删除动作最终完成后,分区0的logStartOffset被置为10,分区1的logStartOffset被置为100
{
  "partitions": [
    {
      "topic": "topic-1",
      "partition": 0,
      "offset": 10
    },
    {
      "topic": "topic-1",
      "partition": 1,
      "offset": 100
    }
  ],
  "version": 1
}

二、其他

2.1 Kafka Connect

  • 可以将数据从Kafka中导入或者导出。
2.1.1 Connector
  • Kafka Connect中有两个核心概念:Source和Sink,前者将数据导入Kafka,后者从Kafka导出数据,二者都被称为Connector。
    在这里插入图片描述

  • Kafka Connect特性

1.通用性;规范化其他数据与kafka的集成
2.支持独立模式和分布式模式
3.提供REST接口
4.自动位移管理
5.流式计算和批处理集成。
2.1.2 两种模式
  • 独立模式
connect-standalone.sh用于独立模式运行Kafka Connect,适合于测试和功能验证场景,无法利用负载均衡和高容错的特性。
  • 分布式模式
connect-distributed.sh用于分布式模式运行Kafka Connect,可以结合Kafka的负载均衡和故障转移功能。
2.1.3 REST API
  • Kafka提供看REST风格的API来管理Kafka Connect,默认端口8083,比如接口:GET / 用于查看Kafka集群版本信息,更多接口信息可以阅读参考文章[1]的9.2.2小结。

2.2 Kafka Mirror Maker

  • 用于在2个kafka集群直接同步数据的工具,其原理是从源集群中消费数据并将消息写入目标集群,可以实现准实时的数据同步。

2.3 Kafka Stream

  • Kafka Stream是一个用于处理和分析数据的客户端库,它对存储在kafka中的数据进行分析和处理并将结果写回kafka或者发送到外部系统。该库可以和应用程序相结合
  • Kafka Stream特性
    在这里插入图片描述

三、小结

  • 关于Kafka的一些应用简介

四、参考

在比较 `python-kafka` 和 `confluent-kafka` 这两个 Python 客户端库时,可以从功能、性能、易用性和生态系统支持等多个维度进行分析。 ### 功能支持 `python-kafka` 是一个纯 Python 实现的 Kafka 客户端,支持 Kafka 的基本功能,包括生产者(Producer)、消费者(Consumer)和管理操作(如 topic 创建和删除)[^1]。它与 Kafka 的 Java 客户端相比功能较为基础,但在某些场景下已经足够使用。 `confluent-kafka` 则是基于 C 语言实现的 Kafka 客户端库(librdkafka),提供了 Python 的绑定。它不仅支持 Kafka 的核心功能,还集成了 Confluent 提供的许多高级特性,如 Schema Registry 支持、Kafka Connect 集成以及 Kafka Streams 的流处理能力。 ### 性能 由于 `confluent-kafka` 是基于 C 语言实现的 librdkafka,其性能通常优于 `python-kafka`。特别是在高吞吐量和低延迟的场景下,`confluent-kafka` 表现出更高的效率和更低的资源消耗。而 `python-kafka` 作为纯 Python 实现,在性能上相对较弱,尤其是在处理大量消息时可能会出现瓶颈。 ### 易用性 `python-kafka` 的 API 设计较为简单,适合快速上手和使用。对于只需要基本 Kafka 功能的应用来说,`python-kafka` 提供了足够的灵活性和易用性。 相比之下,`confluent-kafka` 的 API 更加复杂,但同时也提供了更多的配置选项和高级功能。虽然学习曲线较陡,但对于需要高性能和复杂功能的应用来说,`confluent-kafka` 是更好的选择。 ### 生态系统支持 `confluent-kafka` 与 Confluent 平台紧密集成,支持 Schema Registry、Kafka Connect 和 Kafka Streams 等高级功能。这些工具可以帮助开发者更好地管理和处理 Kafka 中的数据流。此外,Confluent 还提供了丰富的文档和技术支持,使得 `confluent-kafka` 在企业级应用中更具优势。 `python-kafka` 虽然也有一定的社区支持,但在生态系统方面不如 `confluent-kafka` 强大。它更适合于那些只需要 Kafka 基本功能的小型项目或原型开发。 ### 示例代码 以下是一个简单的生产者示例,展示如何使用 `python-kafka` 发送消息: ```python from kafka import KafkaProducer producer = KafkaProducer(bootstrap_servers='localhost:9092') producer.send('my-topic', b'Hello, Kafka!') producer.flush() producer.close() ``` 而 `confluent-kafka` 的生产者示例如下: ```python from confluent_kafka import Producer conf = {'bootstrap.servers': 'localhost:9092'} producer = Producer(conf) producer.produce('my-topic', key='key', value='Hello, Confluent Kafka!') producer.flush() producer.close() ``` ### 总结 - **功能**:`confluent-kafka` 提供了更丰富的功能和集成支持。 - **性能**:`confluent-kafka` 在性能上明显优于 `python-kafka`。 - **易用性**:`python-kafka` 更加简单易用,适合快速开发。 - **生态系统**:`confluent-kafka` 与 Confluent 平台集成,生态系统更强大。 根据具体需求和应用场景,可以选择合适的 Kafka Python 客户端库。如果需要高性能和高级功能,推荐使用 `confluent-kafka`;如果只需要基本功能且希望快速上手,则可以考虑 `python-kafka`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值