Kafka主要构成:
1、Broker:集群中的每一个对应的服务器被称之为broker。
2、Topic 用于区别消息的类别,每个topic中包含多个Partition;Partition主要可以减少每个日志的数据量,也可以增加请求的并发量。
3、Producer 消息的生产者,可通过配置partitioner.class设置消息发送到那个Partition上。
4、Consumer 消息的消费者,可以订阅需要的topics。
其中更多的其他术语可以参考kafka官方文档。
Kafka配置:通过官网下载并安装,通过文件config下的相关properties进行配置;
server.properties启动服务时的相关配置,可拷贝多个配置多个broker服务(单台服务器上配置多个broker服务的方式),如server-1.properties
console-xxxx.properties启动相关控制台的配置。
1、server.properties配置文件,启动命令
kafka:bin/kafka-server-start.sh config/server.properties
# broker_id,集群环境下不能重复 broker.id=0 # broker 开放的端口 port=9092 # broker 绑定的主机名 host.name=localhost # producers、consumers连接的地址. 若没配置,则使用host.name # 但是在编码过程中发现如不配置这项的话,系统无法启动,比较费解 advertised.host.name=192.168.52.128 # 同advertised.host.name类似 #advertised.port=<port accessible by clients> #存放消息文件的目录 log.dirs=/tmp/kafka-logs #topic默认的分区数量,数量多少可以影响并发量 num.partitions=1 ##zookeeper的配置 zookeeper.connect=192.168.52.128:2181 # Timeout in ms for connecting to zookeeper zookeeper.connection.timeout.ms=6000
其它配置属性可参考server内部自行配置。
2、producer.properties配置文件
# list of brokers used for bootstrapping knowledge about the rest of the cluster # format: host1:port1,host2:port2 ... # 配置broker节点数据信息,用于获取元数据信息 metadata.broker.list=192.168.52.128:9092 # name of the partitioner class for partitioning events; default partition spreads data randomly # 消息发送到那个分区的配置,默认使用org.apache.kafka.clients.producer.internals.DefaultPartitioner #partitioner.class= # specifies whether the messages are sent asynchronously (async) or synchronously (sync) producer.type=sync # specify the compression codec for all data generated: none, gzip, snappy, lz4. # the old config values work as well: 0, 1, 2, 3 for none, gzip, snappy, lz4, respectively compression.codec=none # message encoder serializer.class=kafka.serializer.DefaultEncoder # allow topic level compression # 压缩方式 #compressed.topics=
3、consumer.properties配置文件v
# Zookeeper connection string # comma separated host:port pairs, each corresponding to a zk # server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002" # 监控的zookeeper链接,消费者主要通过zookeeper获取数据 zookeeper.connect=192.168.52.128:2181 # timeout in ms for connecting to zookeeper zookeeper.connection.timeout.ms=6000 #consumer group id #消费者分组信息,每个消息只能被分组中的某个消费者消费 group.id=test-consumer-group #consumer timeout #consumer.timeout.ms=5000
4、connect-xxxx.properties配置文件主要对kafka 0.9的新版特性的相关配置,connect可以对大数据量的源数据拷贝到目标系统中。
connect-standalone.properties和connect-distributed.properties两个为单机和分布式下的connect启动配置文件,配置详细信息可见具体文件。其启动命令:
bin/connect-distributed.sh config/connect-distributed.properties
connect-file-source.properties配置源系统的connector:
#connector唯一的名称 name=local-console-source #connector的实现 connector.class=org.apache.kafka.connect.file.FileStreamSourceConnector #connector需要创建的最大任务数 tasks.max=1 #需要处理的topic类别 topic=connect-test
connect-file-sink.properties配置目标系统的connector(和以上配置类似):
name=local-file-sink connector.class=org.apache.kafka.connect.file.FileStreamSinkConnector tasks.max=1 file=test.sink.txt #接收topic类别列表 topics=connect-test
kafka相关命令
1、topic相关命令
#创建topic bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic mykafka #查看topic topic:bin/kafka-topics.sh --list --zookeeper localhost:2181
2、producer发送消息
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic mykafka
3、customer消费消息
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic mykafka --from-beginning
以上是对kafka简单的配置及命令操作。
Kafka的优缺点:
kafka相较于其他mq而言,消费者采用主动poll的模式,poll模式有利于customer根据自身处理能力获取数据。
kafka的容错性,kafka提供对partitioner的备份到其他broker服务器上;如有服务器挂掉,则zookeeper会重新选择leader处理消息信息。
配置多个partitioner可提高并发,但不能保证消息的顺序性;若要保证消息的顺序,则只需配置一个分区即可。
不支持消息的事务性,消息发送包括三种情况(可配置重试次数):
1、最多只发送一次,消息有可能会丢失,但不会再重发。
2、至少发送一次,消息不会丢失,但有可能会出现重复发送。
3、保证消息会且仅会发送一次。
更多的信息可以查看http://www.infoq.com/cn/articles/kafka-analysis-part-1或者
官网文档http://kafka.apache.org/documentation.html