使用confluent安装kafka

confluent简介

confluent是平台化的工具,封装了kafka,让我们可以更方便的安装和使用监控kafka,作用类似于CDH对于Hadoop。

confluent是由LinkedIn开发出Apache Kafka的团队成员,基于这项技术创立了新公司Confluent,Confluent的产品也是围绕着Kafka做的。基本架构如下:

官网
https://www.confluent.io

下载地址
https://www.confluent.io/download/

物理机安装参考
Confluent Open Source Quick Start (Local)

docker安装参考
Confluent Open Source Quick Start (Docker)

对比之后感觉比原生的kafka安装简单很多,容器是docker容器的版本,对于我们在k8s中使用很方便。

Confluent的组件

Confluent Platform 包括更多的工具和服务,使构建和管理数据流平台更加容易。
Confluent Control Center(闭源)。管理和监控Kafka最全面的GUI驱动系统。
Confluent Kafka Connectors(开源)。连接SQL数据库/Hadoop/Hive
Confluent Kafka Clients(开源)。对于其他编程语言,包括C/C++,Python
Confluent Kafka REST Proxy(开源)。允许一些系统通过HTTP和kafka之间发送和接收消息。
Confluent Schema Registry(开源)。帮助确定每一个应用使用正确的schema当写数据或者读数据到kafka中。

Confluent的安装

下载地址:
http://www.confluent.io/download
打开后,显示最新版本,在右边填写信息后,点击Download下载。

本次我们主要使用REST Proxy,当然底层的broker也是使用confluent的kafka组件,下面简述安装步骤:

下载confluent4.0.0

 
  1. wget http://packages.confluent.io/archive/4.0/confluent-oss-4.0.0-2.11.tar.gz
  2. tar xvf confluent-oss-4.0.0-2.11.tar.gz

解压到指定目录下
通过查看目录的内容,能够发现,confluent里面是含有kafka的,也就是说,如果你没有安装kafka,那么可以通过confluent直接对kafka进行安装。如果已经安装了kafka,可以使用confluent提供的插件。

转载请注明出处:使用confluent本地安装和使用kafka

自定义配置

我们可以配置自己需要的和对应配置信息

进入解压出来的confluent-4.0.0

 
  1. cd confluent-4.0.0

配置zookeeper

 
  1. vi etc/kafka/zookeeper.properties

内容如下:

 
  1. dataDir=/var/lib/zookeeper
  2. clientPort=2181
  3. maxClientCnxns=0

配置kafka的broker

 
  1. vi etc/kafka/server.properties

内容如下:

 
  1. broker.id=50
  2. delete.topic.enable=true
  3. listeners=PLAINTEXT://192.168.11.91:9092
  4. num.network.threads=3
  5. num.io.threads=8
  6. socket.send.buffer.bytes=102400
  7. socket.receive.buffer.bytes=102400
  8. socket.request.max.bytes=104857600
  9. log.dirs=/var/lib/kafka
  10. num.partitions=1
  11. num.recovery.threads.per.data.dir=1
  12. log.retention.hours=168
  13. log.segment.bytes=1073741824
  14. log.retention.check.interval.ms=300000
  15. zookeeper.connect=192.168.11.91:2181
  16. zookeeper.connection.timeout.ms=6000
  17. confluent.support.metrics.enable=true
  18. confluent.support.customer.id=anonymous

配置rest proxy

 
  1. vi etc/kafka-rest/kafka-rest.properties

内容如下:

 
  1. id=kafka-rest-server
  2. #zookeeper.connect=192.168.11.91:2181
  3. bootstrap.servers=PLAINTEXT://localhost:9092

配置schema registry

 
  1. vi etc/schema-registry/schema-registry.properties

内容如下:

 
  1. listeners=http://0.0.0.0:8081
  2. kafkastore.connection.url=192.168.11.91:2181
  3. kafkastore.topic=_schemas
  4. debug=false

启动服务

启动kafka-rest

 
  1. bin/kafka-rest-start etc/kafka-rest/kafka-rest.properties

上面的这种方式是前台启动,也可以以后台方式启动。

 
  1. nohup bin/kafka-rest-start etc/kafka-rest/kafka-rest.properties &

启动zookeeper

 
  1. bin/zookeeper-server-start -daemon etc/kafka/zookeeper.properties

启动kafka broker

 
  1. bin/kafka-server-start -daemon etc/kafka/server.properties

启动schema registry

 
  1. bin/schema-registry-start -daemon etc/schema-registry/schema-registry.properties

测试使用

查看topics
浏览器访问或者curl都可以

 
  1. http://192.168.11.91:8082/topics

查看集群的brokers

 
  1. curl http://192.168.11.91:8082/brokers

注册consumer group

 
  1. curl -X POST -H "Content-Type: application/vnd.kafka.v2+json" -H "Accept: application/vnd.kafka.v2+json" --data '{"name": "my_consumer_instance", "format": "json", "auto.offset.reset": "earliest"}' http://localhost:8082/consumers/my_test_consumer

把topic和消费者my_consumer关联起来

 
  1. curl -X POST -H "Content-Type: application/vnd.kafka.v2+json" --data '{"topics":["bear"]}' http://localhost:8082/consumers/my_test_consumer/instances/my_consumer_instance/subscription

通过rest接口向bear push数据

 
  1. curl -X POST -H "Content-Type: application/vnd.kafka.json.v2+json" --data '{"records":[{"value":{"name": "testUser"}}]}' "http://localhost:8082/topics/bear"

通过rest接口消费数据

 
  1. curl -X GET -H "Accept: application/vnd.kafka.json.v2+json" http://localhost:8082/consumers/my_test_consumer/instances/my_consumer_instance/records

删除注册的consumer实例:

 
  1. curl -X DELETE -H "Accept: application/vnd.kafka.v2+json" http://localhost:8082/consumers/my_test_consumer/instances/my_consumer_instance

转载请注明出处:使用confluent本地安装和使用kafka

好的,使用confluent-kafka库,可以通过以下代码修改Kafka消费者组的重平衡策略为StickyAssignor: ```python from confluent_kafka import Consumer, KafkaError from confluent_kafka import TopicPartition from confluent_kafka import Offset from confluent_kafka import ConsumerRebalanceListener class StickyAssignorListener(ConsumerRebalanceListener): def on_partitions_revoked(self, revoked): # 在分区重新分配之前,你可以在这里保存消费者组的偏移量, # 并在分配新分区时重新分配它们 pass def on_partitions_assigned(self, assigned): # 在分区重新分配之后,你可以在这里读取消费者组的偏移量, # 并从上次的偏移量继续消费新分配的分区 pass conf = { 'bootstrap.servers': 'localhost:9092', 'group.id': 'my-group-id', 'enable.auto.commit': False, 'partition.assignment.strategy': 'org.apache.kafka.clients.consumer.StickyAssignor', 'session.timeout.ms': 6000, # 添加重平衡监听器 'on_assign': StickyAssignorListener() } consumer = Consumer(conf) # 手动指定分区和偏移量 consumer.assign([TopicPartition('my-topic', 0, Offset(1234)), TopicPartition('my-topic', 1, Offset(5678)), TopicPartition('my-topic', 2, Offset(9012))]) # 消费消息 while True: msg = consumer.poll(1.0) if msg is None: continue if msg.error(): if msg.error().code() == KafkaError._PARTITION_EOF: print('End of partition reached {0}/{1}' .format(msg.topic(), msg.partition())) else: print('Error: {0}'.format(msg.error())) else: print('Received message: {0}'.format(msg.value())) consumer.commit(msg) consumer.close() ``` 在上面的代码中,我们使用Kafka消费者的`on_assign`配置项,将`StickyAssignorListener`监听器传递给消费者,从而实现了StickyAssignor策略。需要注意的是,我们需要手动指定分区和偏移量,以便在分区重新分配时重新分配它们。 当消费者需要退出时,需要调用`close()`方法关闭消费者,以确保所有未提交的偏移量都已提交: ```python consumer.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值