centos kafka使用和python生产和消费消息

安装Kafka
1.更新系统

sudo yum install epel-release -y
sudo yum update -y

2.安装jdk

sudo yum install -y java-1.8.0-openjdk
java -version

3.配置java环境变量
查看java环境变量

echo $JAVA_HOME

配置环境变量

echo "JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")" | sudo tee -a /etc/profile

配置生效

source /etc/profile

4.安装Kafka

wget https://mirrors.bfsu.edu.cn/apache/kafka/2.7.1/kafka_2.12-2.7.1.tgz
tar -xzf kafka_2.12-2.7.1.tgz

创建一个文件的软连接,这样可以方便进行kafka的升级,这步暂时忽略

sudo ln -s /opt/kafka_2.12-2.4.0 /opt/kafka

进入到kafka目录下,启动kafka,启动kafka之前得先启动zookeeper

bin/zookeeper-server-start.sh config/zookeeper.properties

后台启动zookeeper

bin/zookeeper-server-start.sh -daemon config/zookeeper.properties

打开另一个终端会话启动kafka

bin/kafka-server-start.sh config/server.properties

后台启动kafka

sh bin/kafka-server-start.sh config/server.properties 1>/dev/null  2>&1  &
nohup bin/kafka-server-start.sh config/server.properties 1>/dev/null 2>&1 &
nohup bin/kafka-server-start.sh config/server.properties >/dev/null 2>&1 & 
bin/kafka-server-start.sh -daemon config/server.properties

Topic命令
创建一个名为“test”的Topic,只有一个分区和一个备份

bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test

创建好之后,可以通过运行以下命令,查看已创建的topic信息

> bin/kafka-topics.sh --describe --topic test --bootstrap-server localhost:9092
Topic: test     PartitionCount: 1       ReplicationFactor: 1    Configs: segment.bytes=1073741824
Topic: test     Partition: 0    Leader: 0       Replicas: 0     Isr: 0

增加topic的 partition 数

bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic test --partitions 5 

查看 topic 指定分区 offset 的最大值或最小值
time 为 -1 时表示最大值,为 -2 时表示最小值:

bin/kafka-run-class.sh kafka.tools.GetOffsetShell --topic test --time -1 --broker-list 127.0.0.1:9092 --partitions 0 

查看所有topic

bin/kafka-topics.sh --zookeeper localhost:2181 --list

删除topic

bin/kafka-topics.sh --zookeeper localhost:2181 --topic test --delete 

消息命令
发送消息

> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
This is a message
This is another message

消费消息
从头开始

> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
This is a message
This is another message

从尾部开始取数据,必需要指定分区:

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --offset latest --partition 0

指定分区

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --offset latest --partition 0

取指定个数

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --offset latest --partition 0 --max-messages 1 

删除zookeeper中的topic信息

rmr /brokers/topics/kfk_test
rmr /config/topics/kfk_test
rmr /admin/delete_topics/kfk_test
rmr /consumers/kfk_test-group

删除topic数据相关的目录

rm -rf /var/local/kafka/data/kfk_test*

停止kafka服务,先后

bin/kafka-server-stop.sh
bin/zookeeper-server-stop.sh 

消费组命令
查看消费组列表

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list

指定 Group消费

bin/kafka-console-consumer.sh --bootstr-server localhost:9092 --topic test -group my-group --from-beginning

查看 Group 详情

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group my-group --describe

删除 Group 中 Topic

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group my-group --topic test --delete

删除 Group

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group my-group --delete

平衡 leader

bin/kafka-preferred-replica-election.sh --bootstrap-server localhost:9092

自带压测工具

bin/kafka-producer-perf-test.sh --topic test --num-records 100 --record-size 1 --throughput 100 --producer-props bootstrap.servers=localhost:9092 

python生产消息

def sendmsg():
	from kafka import KafkaProducer
	from kafka.errors import KafkaError
	# data必须是str
	producer = KafkaProducer(bootstrap_servers=['192.168.16.128:9092'],value_serializer=lambda m: json.dumps(m).encode('utf-8'))
	future = producer.send('test', value=data,partition=0)
	try:
	    record_metadata = future.get(timeout=10)
	except KafkaError as e:
	    print(e)
	    return {'code' : 406,'msg':'KafkaServer请求发送失败'}
	else:
	    return 'success'

python消费消息

def consumermsg():
	from kafka import KafkaConsumer
	'''auto_offset_reset的作用,是在你的 group_id 第一次运行,还没有 offset(偏移量,相当于索引吧) 的时候,
    给你设定初始的 offset,意思是会返回所有的数据,而一旦你这个 group 已经有 offset 了,
    那么auto_offset_reset这个参数就不会再起作用了,消费者会从最新的offset开始读数据,也就是最新的数据。
    Topic 里面有100个数据,你设置了一个全新的 group_id 为test2。auto_offset_reset设置为 earliest。
    那么当你的消费者运行的时候,Kafka 会先把你的 offset 设置为0,然后让你从头开始消费的,就是会把所有数据读一遍。
    Topic 里面有100个数据,你设置了一个全新的 group_id 为test3。auto_offset_reset设置为 latest。
    那么当你的消费者运行的时候,Kafka 会先把你的 offset 设置为100,Kafka 不会给你返回任何数据,
    前100条数据的状态设置为已经被你消费的状态,消费者看起来就像卡住了一样。'''
    consumer = KafkaConsumer('test',
                            bootstrap_servers=['192.168.16.128:9092'],
                            group_id='my-group',
                            auto_offset_reset='latest',
                            value_deserializer=lambda m: json.loads(m.decode('utf-8'))
                            )
    for message in consumer:
    	print(message.value)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值