kafka 教程(三)-远程访问

本文详细介绍了如何配置Kafka以实现远程访问,包括两种解决方案,并提供了异常测试记录。接着,文章涵盖了基础操作,如Producer和Consumer的使用,以及消息发送的阻塞方式。还讨论了指定消费者组、设定offset以及定时主动拉取等高级话题,帮助读者深入理解Kafka的使用技巧。
摘要由CSDN通过智能技术生成

远程连接 kafka 配置

默认的 kafka 配置是无法远程访问的,解决该问题有几个方案。

方案1

advertised.listeners=PLAINTEXT://IP:9092

注意必须是 ip,不能是 hostname

 

方案2

advertised.listeners=PLAINTEXT://node0:9092

node0 是 hostname,需在 /etc/hosts 中 添加一行

172.16.89.80 node0

 

然后 必须在 远程机(要访问 kafka 的机器 windows)上修改 hosts文件,

C:\Windows\System32\drivers\etc\hosts

在末尾加上 

IP1  节点1
IP2  节点2

节点名与服务器上的 hostname 相同。

 

测试异常记录

WARN [Consumer clientId=consumer-1, groupId=console-consumer-4184] Connection to node -1 (/172.16.89.80:9092) could not be established. Broker may not be available
. (org.apache.kafka.clients.NetworkClient)

kafka 配置 与 console 启动的 ip 不一致,如 配置文件中 listeners=PLAINTEXT://172.16.89.80:9092,启动 是  localhost

 

kafka.errors.NoBrokersAvailable: NoBrokersAvailable

listeners=PLAINTEXT://172.16.89.80:9092

 

基础操作

最简单的场景,生产者发送,消费者接收

Producer

send(self, topic, value=None, key=None, headers=None, partition=None, timestamp_ms=None)

producer = KafkaProducer(bootstrap_servers = '172.16.89.80:9092')
# producer = KafkaProducer(bootstrap_servers = 'node0:9092')
# 如果这里是 ip,后面必须加 producer.flush() 或者 producer.close();
# 如果是 hostname,则不需要,但是好像有丢包
print(producer.config)  # 打印配置信息

topic = '91202'
for i in range(200):
    msg = "msg%d" % i
    producer.send(topic, msg)

producer.flush()
# producer.close()

上面的注释是我亲测的结果,至于为什么,我还没明白,谁能帮我解答

 

Consumer

topic = '91202'
consumer = KafkaConsumer(topic, bootstrap_servers=['172.16.89.80:9092'])
# consumer是一个消息队列,当后台有消息时,这个消息队列就会自动增加.所以遍历也总是会有数据,当消息队列中没有数据时,就会堵塞等待消息带来
for msg in consumer:
    recv = "%s:%d:%d: key=%s value=%s" % (msg.topic, msg.partition, msg.offset, msg.key, msg.value)
    print recv
    time.sleep(2)

注意 这种消费方式只能消费实时数据,不能消费历史数据

 

如果想读历史消息,可以这样写

consumer = KafkaConsumer(topic, auto_offset_reset='earliest', bootstrap_servers=['172.16.89.80:9092'])

 auto_offset_reset:重置 offset,earliest 表示移到最早的可用消息,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值