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
来源:oschina
链接:https://my.oschina.net/u/1263326/blog/607837