我有一个kafka制作人来写kafka集群的主题:
InputStream is = KafkaHandler.class.getResourceAsStream("/conf/kafka.properties");
props.load(new InputStreamReader(is));
for (Object key : props.keySet()) {
log.debug(">>>>>>>>" + key.toString() + "=" + props.getProperty(key.toString()).toString());
}
ProducerConfig config = new ProducerConfig(props);
producer = new Producer<String, String>(config);
topic = props.getProperty("kafka.topic");
if (null != producer && null != topic) {
KeyedMessage<String, String> data = new KeyedMessage<String, String>(topic, key, value);
producer.send(data);
log.debug("KafkaHandler::writeKafka(): data=" + data);
} else {
throw new KafkaException("kafka producer is bad");
}
和kafka.properties:
metadata.broker.list=192.168.199.156:9092,192.168.199.151:9092,192.168.199.157:9092,192.168.199.158:9092,192.168.199.159:9092
zookeeper.connect=192.168.199.156:2181,192.168.199.151:2181,192.168.199.157:2181
serializer.class=kafka.serializer.StringEncoder
request.required.acks=1
#partitioner.class=com.cwl.util.KafkaNewPartitioner
partitioner.class=com.cwl.util.KafkaPartitioner
kafka.topic=Cwl_Web_Collector
而分区类:
public class KafkaPartitioner implements Partitioner {
private Random random = new java.util.Random();
public KafkaPartitioner(VerifiableProperties props) {}
public int partition(Object key, int numOfPartition) {
// return ((int)System.currentTimeMillis() % numOfPartition);
int partition = random.nextInt(numOfPartition); // return random 0-7 failed: kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries.
// int partition = 0; // return 0 will write OK
return partition;
}
}
我发现&#34; num.partitions = 8&#34;在以下kafka配置中:
request.timeout.ms = 30000
log.roll.hours = 168
inter.broker.protocol.version = 0.9.0.X
log.preallocate = false
security.inter.broker.protocol = PLAINTEXT
controller.socket.timeout.ms = 30000
broker.id.generation.enable = false
ssl.keymanager.algorithm = SunX509
ssl.key.password = null
log.cleaner.enable = true
ssl.provider = null
num.recovery.threads.per.data.dir = 1
background.threads = 10
unclean.leader.election.enable = false
sasl.kerberos.kinit.cmd = /usr/bin/kinit
replica.lag.time.max.ms = 10000
ssl.endpoint.identification.algorithm = null
auto.create.topics.enable = true
zookeeper.sync.time.ms = 2000
ssl.client.auth = none
ssl.keystore.password = null
log.cleaner.io.buffer.load.factor = 0.9
offsets.topic.compression.codec = 0
log.retention.hours = 72
log.dirs = /var/local/kafka/data
ssl.protocol = TLS
log.index.size.max.bytes = 10485760
sasl.kerberos.min.time.before.relogin = 60000
log.retention.minutes = null
connections.max.idle.ms = 600000
ssl.trustmanager.algorithm = PKIX
offsets.retention.minutes = 1440
max.connections.per.ip = 2147483647
replica.fetch.wait.max.ms = 500
metrics.num.samples = 2
port = 9092
offsets.retention.check.interval.ms = 600000
log.cleaner.dedupe.buffer.size = 134217728
log.segment.bytes = 1073741824
group.min.session.timeout.ms = 6000
producer.purgatory.purge.interval.requests = 1000
min.insync.replicas = 1
ssl.truststore.password = null
log.flush.scheduler.interval.ms = 9223372036854775807
socket.receive.buffer.bytes = 102400
leader.imbalance.per.broker.percentage = 10
num.io.threads = 8
zookeeper.connect = cdhmaster1:2181,cdhmaster2:2181,cdhslave1:2181
queued.max.requests = 500
offsets.topic.replication.factor = 3
replica.socket.timeout.ms = 30000
offsets.topic.segment.bytes = 104857600
replica.high.watermark.checkpoint.interval.ms = 5000
broker.id = 206
ssl.keystore.location = null
listeners = PLAINTEXT://cdhmaster1:9092,
log.flush.interval.messages = 9223372036854775807
principal.builder.class = class org.apache.kafka.common.security.auth.DefaultPrincipalBuilder
log.retention.ms = null
offsets.commit.required.acks = -1
sasl.kerberos.principal.to.local.rules = [DEFAULT]
group.max.session.timeout.ms = 30000
num.replica.fetchers = 1
advertised.listeners = null
replica.socket.receive.buffer.bytes = 65536
delete.topic.enable = true
log.index.interval.bytes = 4096
metric.reporters = []
compression.type = producer
log.cleanup.policy = delete
controlled.shutdown.max.retries = 3
log.cleaner.threads = 1
quota.window.size.seconds = 1
zookeeper.connection.timeout.ms = null
offsets.load.buffer.size = 5242880
zookeeper.session.timeout.ms = 6000
ssl.cipher.suites = null
authorizer.class.name =
sasl.kerberos.ticket.renew.jitter = 0.05
sasl.kerberos.service.name = kafka
controlled.shutdown.enable = true
offsets.topic.num.partitions = 50
quota.window.num = 11
message.max.bytes = 1000000
log.cleaner.backoff.ms = 15000
log.roll.jitter.hours = 0
log.retention.check.interval.ms = 300000
replica.fetch.max.bytes = 1048576
log.cleaner.delete.retention.ms = 259200000
fetch.purgatory.purge.interval.requests = 1000
log.cleaner.min.cleanable.ratio = 0.5
offsets.commit.timeout.ms = 5000
zookeeper.set.acl = false
log.retention.bytes = -1
offset.metadata.max.bytes = 4096
leader.imbalance.check.interval.seconds = 300
quota.consumer.default = 9223372036854775807
log.roll.jitter.ms = null
reserved.broker.max.id = 1000
replica.fetch.backoff.ms = 1000
advertised.host.name = null
quota.producer.default = 9223372036854775807
log.cleaner.io.buffer.size = 524288
controlled.shutdown.retry.backoff.ms = 5000
log.dir = /tmp/kafka-logs
log.flush.offset.checkpoint.interval.ms = 60000
log.segment.delete.delay.ms = 60000
num.partitions = 8
num.network.threads = 3
socket.request.max.bytes = 104857600
sasl.kerberos.ticket.renew.window.factor = 0.8
log.roll.ms = null
ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]
socket.send.buffer.bytes = 102400
log.flush.interval.ms = null
ssl.truststore.location = null
log.cleaner.io.max.bytes.per.second = 1.7976931348623157E308
default.replication.factor = 1
metrics.sample.window.ms = 30000
auto.leader.rebalance.enable = true
host.name =
ssl.truststore.type = JKS
advertised.port = null
max.connections.per.ip.overrides =
replica.fetch.min.bytes = 1
ssl.keystore.type = JKS
当分区返回0时,可以写入超过1M的记录;当分区在0到7之间随机返回时,抛出异常:
kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries.
at kafka.producer.async.DefaultEventHandler.handle(DefaultEventHandler.scala:91)
任何人都可以帮助找出根本原因吗?谢谢!