Zookeeper + kafka 使用笔记

本文介绍了Kafka如何通过不同的Consumer Group实现单播和广播消息模型,并提供了详细的配置指南及命令示例,包括主题管理、Broker配置等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Kafka实现单播和广播两种消息模型的手段。同一个topic的数据,会广播给不同的group;同一个group中的worker,只有一个worker能拿到这个数据。换句话说,对于同一个topic,每个group都可以拿到同样的所有数据,但是数据进入group后只能被其中的一个worker消费。group内的worker可以使用多线程或多进程来实现,也可以将进程分散在多台机器上,worker的数量通常不超过partition的数量,且二者最好保持整数倍关系,因为Kafka在设计时假定了一个partition只能被一个worker消费(同一group内)。

@KafkaListener 是单线程消费的,多个消费者同时处理同一个组同一topic,会均衡分配消费分区。

 

 

1、linux 查看zookeeper是否启动

jps, 查看进程QuorumPeerMain是否存在,或者用$zookeeper_home:/bin/zkServer.sh status 查看

2、启动zookeeper

$zookeeper_home:/bin/zkServer.sh  start

3、kafka 

参考:http://www.cnblogs.com/wangyangliuping/p/5546465.html

启动:

进入kafka目录,敲入命令 bin/kafka-server-start.sh config/server.properties &

检测2181与9092端口:

netstat -tunlp|egrep "(2181|9092)"
单机连通性测试

启动2个XSHELL客户端,一个用于生产者发送消息,一个用于消费者接受消息。

运行producer,随机敲入几个字符,相当于把这个敲入的字符消息发送给队列。

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test --producer.config config/producer.properties

运行consumer,可以看到刚才发送的消息列表。

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --new-consumer --from-beginning --consumer.config config/consumer.properties
0.查看有哪些主题:
./kafka-topics.sh --list --zookeeper 192.168.0.201:12181
1.查看topic的详细信息
./kafka-topics.sh -zookeeper 127.0.0.1:2181 -describe -topic testKJ1

5、topic 管理

参考:http://blog.youkuaiyun.com/LOUISLIAOXH/article/details/51597173

Consumer Group,同样是逻辑上的概念,是Kafka实现单播和广播两种消息模型的手段。同一个topic的数据,会广播给不同的group;同一个group中的worker,只有一个worker能拿到这个数据。换句话说,对于同一个topic,每个group都可以拿到同样的所有数据,但是数据进入group后只能被其中的一个worker消费。group内的worker可以使用多线程或多进程来实现,也可以将进程分散在多台机器上,worker的数量通常不超过partition的数量,且二者最好保持整数倍关系,因为Kafka在设计时假定了一个partition只能被一个worker消费(同一group内)。

 

6、Kafka Broker Advertised.Listeners属性的设置

#advertised.listeners=PLAINTEXT://192.168.14.140:9092

"PLAINTEXT"表示协议,可选的值有PLAINTEXT和SSL,hostname可以指定IP地址,也可以用"0.0.0.0"表示对所有的网络接口有效,如果hostname为空表示只对默认的网络接口有效

也就是说如果你没有配置advertised.listeners,就使用listeners的配置通告给消息的生产者和消费者,这个过程是在生产者和消费者获取源数据(metadata)。如果都没配置,那么就使用java.net.InetAddress.getCanonicalHostName()返回的值,对于ipv4,基本就是localhost了

然后你的生产者就会一直卡死,没有反应,如果添加slf4j 桥接 log4j,将日志级别调到debug,发现如下的日志输出
java.io.IOException: Can't resolve address: PC-20160623WFCM:9092
    at org.apache.kafka.common.network.Selector.connect(Selector.java:180) ~[kafka-clients-0.10.1.1.jar:na]
    at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:498) [kafka-clients-0.10.1.1.jar:na]
    at org.apache.kafka.clients.NetworkClient.ready(NetworkClient.java:159) [kafka-clients-0.10.1.1.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:193) [kafka-clients-0.10.1.1.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:135) [kafka-clients-0.10.1.1.jar:na]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_121]
Caused by: java.nio.channels.UnresolvedAddressException: null
    at sun.nio.ch.Net.checkAddress(Net.java:101) ~[na:1.8.0_121]
    at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:622) ~[na:1.8.0_121]
    at org.apache.kafka.common.network.Selector.connect(Selector.java:177) ~[kafka-clients-0.10.1.1.jar:na]
    ... 5 common frames omitted

转载于:https://my.oschina.net/u/2988090/blog/1510327

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值