kafka集群安装
官方文档:http://kafka.apache.org/documentation/
其他参考:http://blog.csdn.net/code52/article/details/50475511
http://www.infoq.com/cn/articles/kafka-analysis-part-1
http://www.orchome.com/kafka/index
安装环境:
- master 192.168.255.120
- slave1 192.168.255.121
- slave2 192.168.255.122
- java环境
- (可选)zookeeper环境
安装步骤
1、下载解压
wget http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/1.0.1/kafka_2.12-1.0.1.tgz
2、修改配置
vim /usr/local/kafka_2.12-1.0.1/config/server.properties
broker.id=0 #每个实例不一样
listeners=PLAINTEXT://192.168.255.120:9092 #改为所在主机的ip
advertised.host.name=192.168.255.120 #改为改为所在主机的ip
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/kafkalogs #需手动创建,kafka并不会根据配置文件自动创建
num.partitions=1
num.recovery.threads.per.data.dir=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=192.168.255.120:2181,192.168.255.121:2181,192.168.255.122:2181 #修改为zookeeper所在主机ip:port
zookeeper.connection.timeout.ms=6000
delete.topic.enable=true
auto.create.topics.enable=false
3、启动
(1)Kafka依赖ZooKeeper,需要先启动zookeeper,如果自己没安装zookeeper,可以使用和kafka包的自带的zookeeper。
bin/zookeeper-server-start.sh config/zookeeper.properties
(2)再启动kafka
bin/kafka-server-start.sh -daemon config/server.properties
4、测试
(1)在master创建一个名为test的topic
bin/kafka-topics.sh --create --zookeeper 192.168.255.120:2181 --replication-factor 1 --partitions 1 --topic test
查看topic
bin/kafka-topics.sh --list --zookeeper 192.168.255.120:2181
(2)slave1和slave2上创建consumer
bin/kafka-console-consumer.sh --zookeeper 192.168.255.120:2181 --topic test --from-beginning
(3)master上创建producer
bin/kafka-console-producer.sh --broker-list 192.168.255.120:9092 --topic test
如下图
Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
这句话的意思:
现在正在使用的ConsoleConsumer已废弃,在未来的版本将会被删除。考虑通过[bootstrap-server]代替[zookeeper]来使用新的consumer,即创建消费者时,用以下命令:
bin/kafka-console-consumer.sh --bootstrap-server 192.168.255.120:2181 --topic test --from-beginning
其他常用命令
停止kafka
/usr/local/kafka_2.12-1.0.1/bin/kafka-server-stop.sh
删除topic
报错排查
1、启动时报错:failed; error='Cannot allocate memory' (errno=12)
原因:内存不够
解决办法:1、加内存
2、杀死占用内存高的进程
3、修改kafka-server-start.sh
将export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
改为 export KAFKA_HEAP_OPTS="-Xmx256M -Xms128M"
kafka是什么
Apache kafka是消息中间件的一种,我发现很多人不知道消息中间件是什么,在开始学习之前,我这边就先简单的解释一下什么是消息中间件,只是粗略的讲解,目前kafka已经可以做更多的事情。
举个例子,生产者消费者,生产者生产鸡蛋,消费者消费鸡蛋,生产者生产一个鸡蛋,消费者就消费一个鸡蛋,假设消费者消费鸡蛋的时候噎住了(系统宕机了),生产者还在生产鸡蛋,那新生产的鸡蛋就丢失了。再比如生产者很强劲(大交易量的情况),生产者1秒钟生产100个鸡蛋,消费者1秒钟只能吃50个鸡蛋,那要不了一会,消费者就吃不消了(消息堵塞,最终导致系统超时),消费者拒绝再吃了,”鸡蛋“又丢失了,这个时候我们放个篮子在它们中间,生产出来的鸡蛋都放到篮子里,消费者去篮子里拿鸡蛋,这样鸡蛋就不会丢失了,都在篮子里,而这个篮子就是”kafka“。
鸡蛋其实就是“数据流”,系统之间的交互都是通过“数据流”来传输的(就是tcp、http什么的),也称为报文,也叫“消息”。
消息队列满了,其实就是篮子满了,”鸡蛋“ 放不下了,那赶紧多放几个篮子,其实就是kafka的扩容。
各位现在知道kafka是干什么的了吧,它就是那个"篮子"。
http://www.orchome.com/kafka/index
术语
Broker Kafka集群包含一个或多个服务器,这种服务器被称为broker,broker端不维护数据的消费状态,提升了性能。直接使用磁盘进行存储,线性读写,速度快:避免了数据在JVM内存和系统内存之间的复制,减少耗性能的创建对象和垃圾回收。
Topic 每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。Topic在逻辑上可以被认为是一个队列queue,每条消费都必须指定它的Topic,可以简单理解为必须指明把这条消息放进哪个queue里(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
Partition Partition是物理上的概念,每个Topic包含一个或多个Partition. 为了使得Kafka的吞吐率可以线性提高,物理上把Topic分成一个或多个Partition,每个Partition在物理上对应一个文件夹,该文件夹下存储这个Partition的所有消息和索引文件。若创建topic1和topic2两个topic,且分别有13个和19个分区,则整个集群上会相应会生成共32个文件夹
Producer 负责发布消息到Kafka broker
Consumer 消息消费者,从Kafka broker读取消息的客户端。consumer从broker拉取(pull)数据并进行处理
Consumer Group 每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。