安装
wget http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/0.10.1.1/kafka_2.11-0.10.1.1.tgz
tar xvf kafka_2.11-0.10.1.1.tgz
ln -s kafka_2.11-0.10.1.1 kafka
cd kafka
#修改zk文件路径
vi config/zookeeper.properties
# 修改server配置
advertised.host.name设置为服务器IP地址,(如果没有设置,则会取host.name的值)否则其他机器可能无法发送消息
运行
#启动zk
./bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
#启动kafka
./bin/kafka-server-start.sh -daemon ./config/server.properties
使用
# 测试增加topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 1 --topic test
# 查询topic
bin/kafka-topics.sh --list --zookeeper localhost:2181
# 查询topic分区信息
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
# 发送消息
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
## 消费消息
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
集群副本replication
集群的分区数量
假设对于单个partition,producer端的可达吞吐量为p,Consumer端的可达吞吐量为c,期望的目标吞吐量为t,那么集群所需要的partition数量至少为max(t/p,t/c)。在producer端,单个分区的吞吐量大小会受到批量大小、数据压缩方法、 确认类型(同步/异步)、复制因子等配置参数的影响。经过测试,在producer端,单个partition的吞吐量通常是在10MB/s左右。在consumer端,单个partition的吞吐量依赖于consumer端每个消息的应用逻辑处理速度。
- 对于基于Key来生成的这一类消息需要我们重点关注。当producer向kafka写入基于key的消息时,kafka通过key的hash值来确定消息需要写入哪个具体的分区。通过这样的方案,kafka能够确保相同key值的数据可以写入同一个partition。
- 对于同一个key的所有消息,consumer需要按消息的顺序进行有序消费。如果partition的数量发生改变,那么上面的有序性保证将不复存在。为了避免上述情况发生,通常的解决办法是多分配一些分区,以满足未来的需求。通常情况下,我们需要根据未来1到2年的目标吞吐量来设计kafka的分区数量。
在consumer,kafka只允许单个partition的数据被一个consumer线程消费。因此,在consumer端,每一个Consumer Group内部的consumer并行度完全依赖于被消费的分区数量
Kafka 端到端审计
- Chaperone (Uber)
- Confluent Control Center(非开源,收费)
- Kafka Monitor (LinkedIn)
Comments