The kafka-console-producer.sh defaults to acks=1 so just be careful with using those tools for too much debugging. Your output is helpful though.
https://github.com/apache/kafka/blob/5a2fcdd6d480e9f003cc49a59d5952ba4c515a71/core/src/main/scala/kafka/tools/ConsoleProducer.scala#L185 -hans On Wed, Apr 19, 2017 at 3:52 PM, Shrikant Patel <spa...@pdxinc.com> wrote: > Just to add, I see below behavior repeat with even command line console > producer and consumer that come with Kafka. > > Thanks, > Shri > __________________________________________________ > Shrikant Patel | 817.367.4302 > Enterprise Architecture Team > PDX-NHIN > > > -----Original Message----- > From: Shrikant Patel > Sent: Wednesday, April 19, 2017 5:49 PM > To: users@kafka.apache.org > Subject: RE: [EXTERNAL] Re: Re: ZK and Kafka failover testing > > Thanks Jeff, Onur, Jun, Hans. I am learning a lot from your response. > > Just to summarize briefly my steps, 5 node Kafka and ZK cluster. > 1. ZK cluster has all node working. Consumer is down. > 2. Bring down majority of ZK nodes. > 3. Thing are functional no issue (no dup or lost message) 4. Now first > kafka node come down. > 5. My issue start happening - as you see below producer says message with > key 34 and 35 failed. > 6. Bring majority of ZK node up. > 7. Other kafka nodes assumes leadership for node 1's topic. > 8. Bring consumer up, it starts consuming from the last offset and I see > duplicates. I see message 34 (3 times) and 35 (4 times) > > > Jeff, in my case I don’t see issue with kafka cluster recovering, once the > majority ZK nodes are up, other Kafka takes up leadership for down node > immediately. > Onur, as Jun mentioned since I have acks=all, I am not seeing any messages > being lost. > > Jun, Hans, I had same thought of trying to eliminate the consumer getting > duplicate because of incorrectly acking the message. In next run of this > test case, I was not run client at all. My consumer, producer properties > are in first email in this thread. As I understand RetriableException is > for temporary issue and I would like retry to see if issue resolves itself > by then, hence producer has retries =3 > > Producer log > > ******************* Publisher # Paritition - 12 Key - 26 Value - value 26 > ******************* Publisher # Paritition - 13 Key - 27 Value - value 27 > ******************* Publisher # Paritition - 14 Key - 28 Value - value 28 > ******************* Publisher # Paritition - 0 Key - 29 Value - value 29 > ******************* Publisher # Paritition - 1 Key - 30 Value - value 30 > ******************* Publisher # Paritition - 2 Key - 31 Value - value 31 > ******************* Publisher # Paritition - 3 Key - 32 Value - value 32 > ******************* Publisher # Paritition - 4 Key - 33 Value - value 33 > ******************* Publisher # Paritition - 5 Key - 34 Value - value 34 > 2017-04-19 16:39:08.008 WARN 399580 --- [| shri-producer] > o.a.k.clients.producer.internals.Sender : Got error produce response > with correlation id 37 on topic-partition ${topic-name}-5, retrying (2 > attempts left). Error: NETWORK_EXCEPTION > 2017-04-19 16:39:39.128 WARN 399580 --- [| shri-producer] > o.a.k.clients.producer.internals.Sender : Got error produce response > with correlation id 39 on topic-partition ${topic-name}-5, retrying (1 > attempts left). Error: NETWORK_EXCEPTION > 2017-04-19 16:40:10.271 WARN 399580 --- [| shri-producer] > o.a.k.clients.producer.internals.Sender : Got error produce response > with correlation id 41 on topic-partition ${topic-name}-5, retrying (0 > attempts left). Error: NETWORK_EXCEPTION > 2017-04-19 16:40:41.419 ERROR 399580 --- [| shri-producer] > o.s.k.support.LoggingProducerListener > : Exception thrown when sending a message with key='34' and > payload='value 34' to topic ${topic-name} and partition 5: > org.apache.kafka.common.errors.NetworkException: The server disconnected > before a response was received. > 2017-04-19 16:42:50.621 INFO 399580 --- [pool-1-thread-1] > c.p.p.SpringKafkaPublisher_Simple : ******************* Failed to > publish Paritition - 5 Key - 34 Value - value 34 > java.util.concurrent.ExecutionException: > org.springframework.kafka.core.KafkaProducerException: > Failed to send; nested exception is > org.apache.kafka.common.errors.NetworkException: > The server disconnected before a response was received. > 2017-04-19 16:42:51.001 INFO 399580 --- [pool-1-thread-1] > c.p.p.SpringKafkaPublisher_Simple : ******************* Publisher > # Paritition - 6 Key - 35 Value - value 35 > 2017-04-19 16:43:21.010 WARN 399580 --- [| shri-producer] > o.a.k.clients.producer.internals.Sender : Got error produce response > with correlation id 49 on topic-partition ${topic-name}-6, retrying (2 > attempts left). Error: NETWORK_EXCEPTION > 2017-04-19 16:43:52.152 WARN 399580 --- [| shri-producer] > o.a.k.clients.producer.internals.Sender : Got error produce response > with correlation id 51 on topic-partition ${topic-name}-6, retrying (1 > attempts left). Error: NETWORK_EXCEPTION > 2017-04-19 16:44:23.234 WARN 399580 --- [| shri-producer] > o.a.k.clients.producer.internals.Sender : Got error produce response > with correlation id 53 on topic-partition ${topic-name}-6, retrying (0 > attempts left). Error: NETWORK_EXCEPTION > 2017-04-19 16:44:54.421 ERROR 399580 --- [| shri-producer] > o.s.k.support.LoggingProducerListener > : Exception thrown when sending a message with key='35' and > payload='value 35' to topic ${topic-name} and partition 6: > org.apache.kafka.common.errors.NetworkException: The server disconnected > before a response was received. > > Consumer log (consumer only started at the very end of the test scenario) > value 21 > value 22 > value 23 > value 24 > value 25 > value 26 > value 27 > value 28 > value 29 > value 30 > value 31 > value 32 > value 33 > value 34 > value 34 > value 34 > value 35 > value 35 > value 35 > value 35 > > Output of describe command at point 1. > > Topic:${topic-name} PartitionCount:15 ReplicationFactor:5 > Configs:min.insync.replicas=3 > Topic: ${topic-name} Partition: 0 Leader: 5 Replicas: > 5,4,1,2,3 Isr: 5,1,2,3,4 > Topic: ${topic-name} Partition: 1 Leader: 1 Replicas: > 1,5,2,3,4 Isr: 5,1,2,3,4 > Topic: ${topic-name} Partition: 2 Leader: 2 Replicas: > 2,1,3,4,5 Isr: 5,1,2,3,4 > Topic: ${topic-name} Partition: 3 Leader: 3 Replicas: > 3,2,4,5,1 Isr: 5,1,2,3,4 > Topic: ${topic-name} Partition: 4 Leader: 4 Replicas: > 4,3,5,1,2 Isr: 5,1,2,3,4 > Topic: ${topic-name} Partition: 5 Leader: 5 Replicas: > 5,1,2,3,4 Isr: 5,1,2,3,4 > Topic: ${topic-name} Partition: 6 Leader: 1 Replicas: > 1,2,3,4,5 Isr: 5,1,2,3,4 > Topic: ${topic-name} Partition: 7 Leader: 2 Replicas: > 2,3,4,5,1 Isr: 5,1,2,3,4 > Topic: ${topic-name} Partition: 8 Leader: 3 Replicas: > 3,4,5,1,2 Isr: 5,1,2,3,4 > Topic: ${topic-name} Partition: 9 Leader: 4 Replicas: > 4,5,1,2,3 Isr: 5,1,2,3,4 > Topic: ${topic-name} Partition: 10 Leader: 5 Replicas: > 5,2,3,4,1 Isr: 5,1,2,3,4 > Topic: ${topic-name} Partition: 11 Leader: 1 Replicas: > 1,3,4,5,2 Isr: 5,1,2,3,4 > Topic: ${topic-name} Partition: 12 Leader: 2 Replicas: > 2,4,5,1,3 Isr: 5,1,2,3,4 > Topic: ${topic-name} Partition: 13 Leader: 3 Replicas: > 3,5,1,2,4 Isr: 5,1,2,3,4 > Topic: ${topic-name} Partition: 14 Leader: 4 Replicas: > 4,1,2,3,5 Isr: 5,1,2,3,4 > > (since majority ZK are down at point 6 my describe command does not work) > Output of describe command at point 2. > > Topic:${topic-name} PartitionCount:15 ReplicationFactor:5 > Configs:min.insync.replicas=3 > Topic: ${topic-name} Partition: 0 Leader: 5 Replicas: > 5,4,1,2,3 Isr: 2,3,4,5 > Topic: ${topic-name} Partition: 1 Leader: 5 Replicas: > 1,5,2,3,4 Isr: 2,5,3,4 > Topic: ${topic-name} Partition: 2 Leader: 2 Replicas: > 2,1,3,4,5 Isr: 4,2,5,3 > Topic: ${topic-name} Partition: 3 Leader: 3 Replicas: > 3,2,4,5,1 Isr: 3,4,2,5 > Topic: ${topic-name} Partition: 4 Leader: 4 Replicas: > 4,3,5,1,2 Isr: 2,5,3,4 > Topic: ${topic-name} Partition: 5 Leader: 5 Replicas: > 5,1,2,3,4 Isr: 4,5,2,3 > Topic: ${topic-name} Partition: 6 Leader: 2 Replicas: > 1,2,3,4,5 Isr: 3,4,5,2 > Topic: ${topic-name} Partition: 7 Leader: 2 Replicas: > 2,3,4,5,1 Isr: 2,3,5,4 > Topic: ${topic-name} Partition: 8 Leader: 3 Replicas: > 3,4,5,1,2 Isr: 2,4,5,3 > Topic: ${topic-name} Partition: 9 Leader: 4 Replicas: > 4,5,1,2,3 Isr: 3,4,2,5 > Topic: ${topic-name} Partition: 10 Leader: 5 Replicas: > 5,2,3,4,1 Isr: 5,2,3,4 > Topic: ${topic-name} Partition: 11 Leader: 3 Replicas: > 1,3,4,5,2 Isr: 5,2,3,4 > Topic: ${topic-name} Partition: 12 Leader: 2 Replicas: > 2,4,5,1,3 Isr: 4,3,5,2 > Topic: ${topic-name} Partition: 13 Leader: 3 Replicas: > 3,5,1,2,4 Isr: 5,3,2,4 > Topic: ${topic-name} Partition: 14 Leader: 4 Replicas: > 4,1,2,3,5 Isr: 4,2,5,3 > > Thanks, > Shri > > > -----Original Message----- > From: Jeff Widman [mailto:j...@netskope.com] > Sent: Wednesday, April 19, 2017 4:11 PM > To: users@kafka.apache.org > Subject: [EXTERNAL] Re: Re: ZK and Kafka failover testing > > ***** Notice: This email was received from an external source ***** > > Oops, I linked to the wrong ticket, this is the one we hit: > https://issues.apache.org/jira/browse/KAFKA-3042 > > On Wed, Apr 19, 2017 at 1:45 PM, Jeff Widman <j...@netskope.com> wrote: > > > > > > > > > > > > > *As Onur explained, if ZK is down, Kafka can still work, but won't be > > able to react to actual broker failures until ZK is up again. So if a > > broker is down in that window, some of the partitions may not be ready > > for read or > > write.* > > We had a production scenario where ZK had a long GC pause and Kafka > > lost connection temporarily. The brokers kept sending data just fine > > for existing topics. However, when ZK came back, the kafka cluster > > could not recover gracefully because of this issue: > > https://issues.apache.org/ > > jira/browse/KAFKA-2729 > > IIRC, in our case, the cached data that was mismatched was the > > controller generations in zookeeper for the partition leaders did not > > match the generation id listed in the controller znode. > > Manually forcing a controller re-election solved this because it > > brought all generation IDs in sync. However, it would have been nice > > if the cluster had been able to automatically do the controller > > re-election without waiting for manual intervention. > > > > On Wed, Apr 19, 2017 at 1:30 PM, Jun Rao <j...@confluent.io> wrote: > > > >> Hi, Shri, > >> > >> As Onur explained, if ZK is down, Kafka can still work, but won't be > >> able to react to actual broker failures until ZK is up again. So if a > >> broker is down in that window, some of the partitions may not be > >> ready for read or write. > >> > >> As for the duplicates in the consumer, Hans had a good point. It > >> would be useful to see if the duplicates are introduced by the > >> producer or the consumer. Perhaps you can read the log again and see > >> if duplicates are in the log in the first place. Note that broker > >> retries can introduce duplicates. > >> > >> Hi, Onur, > >> > >> For the data loss issue that you mentioned, that should only happen > >> with acks=1. As we discussed offline, if acks=all is used and unclean > >> leader election is disabled, acked messages shouldn't be lost. > >> > >> Thanks, > >> > >> Jun > >> > >> > >> On Wed, Apr 19, 2017 at 10:19 AM, Onur Karaman < > >> onurkaraman.apa...@gmail.com > >> > wrote: > >> > >> > If this is what I think it is, it has nothing to do with acks, > >> > max.in.flight.requests.per.connection, or anything client-side and > >> > is purely about the kafka cluster. > >> > > >> > Here's a simple example involving a single zookeeper instance, 3 > >> brokers, a > >> > KafkaConsumer and KafkaProducer (neither of these clients interact > >> > with zookeeper). > >> > 1. start up zookeeper: > >> > > ./bin/zookeeper-server-start.sh config/zookeeper.properties > >> > > >> > 2. start up some brokers: > >> > > ./bin/kafka-server-start.sh config/server0.properties > >> > > ./bin/kafka-server-start.sh config/server1.properties > >> > > ./bin/kafka-server-start.sh config/server2.properties > >> > > >> > 3 create a topic: > >> > > ./bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic > >> > > t > >> > --partitions 1 --replication-factor 3 > >> > > >> > 4. start a console consumer (this needs to happen before step 5 so > >> > we > >> can > >> > write __consumer_offsets metadata to zookeeper): > >> > > ./bin/kafka-console-consumer.sh --broker-list > >> > localhost:9090,localhost:9091,localhost:9092 --topic t > >> > > >> > 5. kill zookeeper > >> > > >> > 6. start a console producer and produce some messages: > >> > > ./bin/kafka-console-producer.sh --broker-list > >> > localhost:9090,localhost:9091,localhost:9092 --topic t > >> > > >> > 7. notice the size of the broker logs grow with each message you send: > >> > > l /tmp/kafka-logs*/t-0 > >> > > >> > 8. notice the consumer consuming the messages being produced > >> > > >> > Basically, zookeeper can be completely offline and your brokers > >> > will > >> append > >> > to logs and process client requests just fine as long as it doesn't > >> need to > >> > interact with zookeeper. Today, the only way a broker knows to stop > >> > accepting requests is when it receives instruction from the > controller. > >> > > >> > I first realized this last July when debugging a small production > >> > data > >> loss > >> > scenario that was a result of this[1]. Maybe this is an attempt at > >> leaning > >> > towards availability over consistency. Personally I think that > >> > brokers should stop accepting requests when it disconnects from > zookeeper. > >> > > >> > [1] The small production data loss scenario happens when accepting > >> requests > >> > during the small window in between a broker's zookeeper session > >> expiration > >> > and when the controller instructs the broker to stop accepting > requests. > >> > During this time, the broker still thinks it leads partitions that > >> > are currently being led by another broker, effectively resulting in > >> > a window where the partition is led by two brokers. Clients can > >> > continue sending requests to the old leader, and for producers with > >> > low acknowledgement settings (like ack=1), their messages will be > >> > lost without the client knowing, as the messages are being appended > >> > to the phantom leader's logs instead of the true leader's logs. > >> > > >> > On Wed, Apr 19, 2017 at 7:56 AM, Shrikant Patel <spa...@pdxinc.com> > >> wrote: > >> > > >> > > While we were testing, our producer had following configuration > >> > > max.in.flight.requests.per.connection=1, acks= all and retries=3. > >> > > > >> > > The entire producer side set is below. The consumer has manual > >> > > offset commit, it commit offset after it has successfully > >> > > processed the > >> message. > >> > > > >> > > Producer setting > >> > > bootstrap.servers= {point the F5 VS fronting Kafka cluster} > >> > > key.serializer= {appropriate value as per your cases} > >> > > value.serializer= {appropriate value as per your case} acks= all > >> > > retries=3 > >> > > ssl.key.password= {appropriate value as per your case} > >> > > ssl.keystore.location= {appropriate value as per your case} > >> > > ssl.keystore.password= {appropriate value as per your case} > >> > > ssl.truststore.location= {appropriate value as per your case} > >> > > ssl.truststore.password= {appropriate value as per your case} > >> > > batch.size=16384 client.id= {appropriate value as per your case, > >> > > may help with > >> debugging} > >> > > max.block.ms=65000 > >> > > request.timeout.ms=30000 > >> > > security.protocol= SSL > >> > > ssl.enabled.protocols=TLSv1.2 > >> > > ssl.keystore.type=JKS > >> > > ssl.protocol=TLSv1.2 > >> > > ssl.truststore.type=JKS > >> > > max.in.flight.requests.per.connection=1 > >> > > metadata.fetch.timeout.ms=60000 > >> > > reconnect.backoff.ms=1000 > >> > > retry.backoff.ms=1000 > >> > > max.request.size=1048576 > >> > > linger.ms=0 > >> > > > >> > > Consumer setting > >> > > bootstrap.servers= {point the F5 VS fronting Kafka cluster} > >> > > key.deserializer= {appropriate value as per your cases} > >> > > value.deserializer= {appropriate value as per your case} > >> > > group.id= {appropriate value as per your case} ssl.key.password= > >> > > {appropriate value as per your case} ssl.keystore.location= > >> > > {appropriate value as per your case} ssl.keystore.password= > >> > > {appropriate value as per your case} ssl.truststore.location= > >> > > {appropriate value as per your case} ssl.truststore.password= > >> > > {appropriate value as per your case} enable.auto.commit=false > >> > > security.protocol= SSL > >> > > ssl.enabled.protocols=TLSv1.2 > >> > > ssl.keystore.type=JKS > >> > > ssl.protocol=TLSv1.2 > >> > > ssl.truststore.type=JKS > >> > > client.id= {appropriate value as per your case, may help with > >> > debugging} > >> > > reconnect.backoff.ms=1000 > >> > > retry.backoff.ms=1000 > >> > > > >> > > Thanks, > >> > > Shri > >> > > > >> > > -----Original Message----- > >> > > From: Hans Jespersen [mailto:h...@confluent.io] > >> > > Sent: Tuesday, April 18, 2017 7:57 PM > >> > > To: users@kafka.apache.org > >> > > Subject: [EXTERNAL] Re: ZK and Kafka failover testing > >> > > > >> > > ***** Notice: This email was received from an external source > >> > > ***** > >> > > > >> > > When you publish, is acks=0,1 or all (-1)? > >> > > What is max.in.flight.requests.per.connection (default is 5)? > >> > > > >> > > It sounds to me like your publishers are using acks=0 and so they > >> > > are > >> not > >> > > actually succeeding in publishing (i.e. you are getting no acks) > >> > > but > >> they > >> > > will retry over and over and will have up to 5 retries in flight, > >> > > so > >> when > >> > > the broker comes back up, you are getting 4 or 5 copies of the > >> > > same > >> > message. > >> > > > >> > > Try setting max.in.flight.requests.per.connection=1 to get rid of > >> > > duplicates Try setting acks=all to ensure the messages are being > >> > persisted > >> > > by the leader and all the available replicas in the kafka cluster. > >> > > > >> > > -hans > >> > > > >> > > /** > >> > > * Hans Jespersen, Principal Systems Engineer, Confluent Inc. > >> > > * h...@confluent.io (650)924-2670 */ > >> > > > >> > > On Tue, Apr 18, 2017 at 4:10 PM, Shrikant Patel > >> > > <spa...@pdxinc.com> > >> > wrote: > >> > > > >> > > > Hi All, > >> > > > > >> > > > I am seeing strange behavior between ZK and Kafka. We have 5 > >> > > > node in ZK and Kafka cluster each. Kafka version - > >> > > > 2.11-0.10.1.1 > >> > > > > >> > > > The min.insync.replicas is 3, replication.factor is 5 for all > >> topics, > >> > > > unclean.leader.election.enable is false. We have 15 partitions > >> > > > for each topic. > >> > > > > >> > > > The step we are following in our testing. > >> > > > > >> > > > > >> > > > * My understanding is that ZK needs aleast 3 out of 5 > >> server to > >> > > be > >> > > > functional. Kafka could not be functional without zookeeper. In > >> > > > out testing, we bring down 3 ZK nodes and don't touch Kafka > >> > > > nodes. Kafka is still functional, consumer\producer can still > >> > > > consume\publish > >> from > >> > > > Kafka cluster. We then bring down all ZK nodes, Kafka > >> > > > consumer\producers are still functional. I am not able to > >> > > > understand why Kafka cluster is not failing as soon as majority > >> > > > of ZK nodes are down. I do see error in Kafka that it cannot > >> > > > connection to ZK > >> cluster. > >> > > > > >> > > > > >> > > > > >> > > > * With all or majority of ZK node down, we bring down 1 > >> Kafka > >> > > > nodes (out of 5, so 4 are running). And at that point the > >> > > > consumer > >> and > >> > > > producer start failing. My guess is the new leadership election > >> cannot > >> > > > happen without ZK. > >> > > > > >> > > > > >> > > > > >> > > > * Then we bring up the majority of ZK node up. (1st Kafka > is > >> > > still > >> > > > down) Now the Kafka cluster become functional, consumer and > >> > > > producer now start working again. But Consumer sees big junk of > >> > > > message from kafka, and many of them are duplicates. It's like > >> > > > these messages > >> were > >> > > > held up somewhere, Where\Why I don't know? And why the > duplicates? > >> I > >> > > > can understand few duplicates for messages that consumer would > >> > > > not commit before 1st node when down. But why so many > >> > > > duplicates and > >> like > >> > > > 4 copy for each message. I cannot understand this behavior. > >> > > > > >> > > > Appreciate some insight about our issues. Also if there are > >> > > > blogs > >> that > >> > > > describe the ZK and Kafka failover scenario behaviors, that > >> > > > would be extremely helpful. > >> > > > > >> > > > Thanks, > >> > > > Shri > >> > > > > >> > > > This e-mail and its contents (to include attachments) are the > >> property > >> > > > of National Health Systems, Inc., its subsidiaries and > >> > > > affiliates, including but not limited to Rx.com Community > >> > > > Healthcare Network, > >> Inc. > >> > > > and its subsidiaries, and may contain confidential and > >> > > > proprietary > >> or > >> > > > privileged information. If you are not the intended recipient > >> > > > of > >> this > >> > > > e-mail, you are hereby notified that any unauthorized > >> > > > disclosure, copying, or distribution of this e-mail or of its > >> > > > attachments, or > >> the > >> > > > taking of any unauthorized action based on information > >> > > > contained > >> herein > >> > > is strictly prohibited. > >> > > > Unauthorized use of information contained herein may subject > >> > > > you to civil and criminal prosecution and penalties. If you are > >> > > > not the intended recipient, please immediately notify the > >> > > > sender by > >> telephone > >> > > > at > >> > > > 800-433-5719 <(800)%20433-5719> or return e-mail and > >> > > > permanently > >> delete the original > >> > e-mail. > >> > > > > >> > > This e-mail and its contents (to include attachments) are the > >> property of > >> > > National Health Systems, Inc., its subsidiaries and affiliates, > >> including > >> > > but not limited to Rx.com Community Healthcare Network, Inc. and > >> > > its subsidiaries, and may contain confidential and proprietary or > >> privileged > >> > > information. If you are not the intended recipient of this > >> > > e-mail, you > >> > are > >> > > hereby notified that any unauthorized disclosure, copying, or > >> > distribution > >> > > of this e-mail or of its attachments, or the taking of any > >> unauthorized > >> > > action based on information contained herein is strictly prohibited. > >> > > Unauthorized use of information contained herein may subject you > >> > > to > >> civil > >> > > and criminal prosecution and penalties. If you are not the > >> > > intended recipient, please immediately notify the sender by > >> > > telephone at > >> > > 800-433-5719 <(800)%20433-5719> or return e-mail and permanently > >> delete the original e-mail. > >> > > > >> > > >> > > > > > This e-mail and its contents (to include attachments) are the property of > National Health Systems, Inc., its subsidiaries and affiliates, including > but not limited to Rx.com Community Healthcare Network, Inc. and its > subsidiaries, and may contain confidential and proprietary or privileged > information. If you are not the intended recipient of this e-mail, you are > hereby notified that any unauthorized disclosure, copying, or distribution > of this e-mail or of its attachments, or the taking of any unauthorized > action based on information contained herein is strictly prohibited. > Unauthorized use of information contained herein may subject you to civil > and criminal prosecution and penalties. If you are not the intended > recipient, please immediately notify the sender by telephone at > 800-433-5719 or return e-mail and permanently delete the original e-mail. >