我目前有一个由3台服务器组成的kafka集群:
bin/kafka-topics.sh --create --zookeeper server1.com:2181,
server2.com:2181,server3.com:2181 --replication-factor 3 --partitions 1 --topic kafkatest3
我在server1上的cmd行中发布了此命令,并确认该主题正在运行。 我有一个使用此配置在每个服务器上运行的logstash实例
input {
kafka
{
bootstrap_servers => "server1.com:2181,server2.com:2181,server3.com:2181"
topics => "kafkatest3"
consumer_threads => 3
#group_id => "logstash"
}
}
output
{
syslog
{
host => ["syslogserver.com"]
port => 514
}
}
我一直看到的配置是,只有一个logstash实例似乎正在写入syslog。其他两个人坐在那里闲聊。
有没有办法强制每个logstash行动?我的分区/消费者线程数#是否正确?
谢谢, 卡兰
答案 0 :(得分:2)
Kafka一次只允许一个消费者从任何给定的分区读取。您只使用一个分区创建了主题,因此能够从该主题(对于消费者组)读取的最大消费者数量是一个 - 这就是您所看到的。
如果您杀死正在写入数据的Logstash,您应该看到其他两个中的一个拾取和处理数据。
要让所有三个人获得公平分享的数据,您需要将主题更改为至少有三个分区。