# Hostname Resolver Transformation

It is often useful to rekey the Apache Kafka® Source Records `host` field’s value as an
IP address into a resolved hostname for that IP address. The `Hostname Resolver
Transformation` makes this easy. The transformation will perform a reverse DNS
lookup to replace IP addresses with hostnames. For example, `127.0.0.1` will be
replaced with `localhost` on most machines.

For example, use the transformation by including the following lines in your
connector configuration:

```properties
transforms=hostname
transforms.hostname.type=io.confluent.connect.syslog.HostnameResolverTransformation
```

## Configuration options

`field.name`
: The name of the field that contains the ip address of the remote host.
  <br/>
  * Type: string
  * Default: remoteAddress
  * Importance: medium

`dns.cache.stats.secs`
: The amount of time in seconds to dump the cache statistics for the DNS cache.
  <br/>
  * Type: int
  * Default: 300
  * Valid Values: [1,…]
  * Importance: low

`dns.cache.ttl.secs`
: The amount of time to cache a DNS entry for in seconds.
  <br/>
  * Type: int
  * Default: 300
  * Valid Values: [1,…]
  * Importance: low

`dns.query.timeout.secs`
: The amount of time in seconds before the query is timed out.
  <br/>
  * Type: int
  * Default: 15
  * Valid Values: [1,…]
  * Importance: low

## FieldValueIsIP predicate

When running the Confluent-provided `*.HostnameResolverTransformation`, the
transform is run on every single Syslog message that flows through the
connector. Even though DNS caching is available, this still results in unwanted
reverse DNS and cache lookups on Syslog messages that are already parsed and
contain a hostname. At scale, this degrades the throughput of the Syslog
connector and requires additional Connect workers to be running to support
data volumes while using the transformation.

To workaround this issue, configure a custom transform predicate,
`FieldValueIsIP`, which is intended to be used with
`*.HostnameResolverTransformation`. Use the `FieldValueIsIP` predicate to
only run the hostname transformation when the host is an unresolved IP address.
This reduces the amount of reverse DNS lookups by skipping data that the
hostname has already found inside the Syslog message. For more details about the
`FieldValueIsIP` predicate and an example of how to use it, see the [Predicate
- FieldValueIsIP](https://github.com/nbargovic/kafka-connect-custom-transforms?tab=readme-ov-file#predicate---fieldvalueisip)
topic on GitHub.
