kafka集群部署及仍然存在的问题

一、kafka使用心得:
1.实际上chroot是在kafka/config/server.properties中设置。
2.在kafka进程启动之前,要先在zookeeper上创建好chroot对应的目录
3.kafk进程启动后,会在chroot下面创建以下的目录
consumers : 用来记录消费者的信息,下面的目录是对应consumer指定的group.id
config : 用来记录topics和changes信息
brokers : 用来记录broker机器的信息
controller : 未知
controller_epoch : 未知
4.目前使用的是0.8.1.1版本的kafka,配置项说明以这为准:

http://kafka.apache.org/08/configuration.html

producer是不需要指定zk.connect的。直接指定metadata.broker.list就可以了。实际上broker知道对应的zookeeper的chroot
5.consumer需要知道kafka对应的zookeeper的chroot,否则就无法确定broker的信息。
实际上zookeeper + chroot和broker list信息是互相对应的,知道了一个,就可以获得另一个的信息。

二、kafka单机模式
由于原来在zookeeper中/kafka是永久节点,所以换一个目录叫kafka2,这一点只要修改config/servers.properties的zookeeper.connect
这一项就可以做到。

kafka进程启动后,会在zookeeper中建永久节点:在brokers/ids下建一个名为1的节点(因为节点的id名是1)。它的属性里有以下数据
{“jmx_port”:9999,”timestamp”:”1406365319747″,”host”:”kafka1″,”version”:1,”port”:9092}
启动客户端往kafka里写入数据时,会在logs/目录下生成
topic1-0
topic1-1
说明这个topic一共有2个partition。(配置文件里有num.partitions=2)
里面各有两个文件:
00000000000000000000.index
00000000000000000000.log
生产者往kafka中写入10条消息,内容都写到了topic1-1中,也就是parition 1中。
写入成功后,会在zookeeper中的brokers/topics下生成以下的节点
topic1
这个是topic的名字
不知道为什么,数据都往partition 1写

三、kafka的consumer group
启动consumer,指定group.id
在zookeeper中,会创建节点
consumers/${group.id}
下面有
offset
owners
ids
对于offset来说
{topicName}/1
保存着partition 1读取的offset
owners里保存的是
${group.id}${hostname}
ids里保存的是${group.id}${hostname}的对应信息
四、kafka的集群模式

把另一个broker也启动起来,原来的broker机器名是kafka1,另一个broker的机器名是kafka2
注意,config/server.properties中
host.name=kafka1
需要设置这一项,否则默认host.name是localhost,在集群模式下可能会有问题。
写入数据时,broker.list要设置为kafka1:9092,kafka2:9092

五,仍然没有解决的问题:

虽然数据能写进去,但是发现总是往partition 1写
kafka1
du -hs ~/kafka/log/topic*/*.log
0 /home/hadoop/kafka/log/topic0-0/00000000000000000000.log
4.0K /home/hadoop/kafka/log/topic1-1/00000000000000000000.log
0 /home/hadoop/kafka/log/topic3-0/00000000000000000000.log
kafka2
du -hs log/topic*/*.log
4.0K log/topic0-1/00000000000000000000.log
0 log/topic1-0/00000000000000000000.log
36K log/topic3-1/00000000000000000000.log

你可能感兴趣的:(技术)