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)。

posted @ 2018-03-16 07:08  fanren224  阅读(180)  评论(0编辑  收藏  举报