본관은 상산(商山). 자는 하경(夏卿), 호는 귀래당(歸來堂). 김홍(金洪)의 증손으로, 할아버지는 김덕함(金德諴)고, 아버지는 수찬(修撰) 김설(金卨)이며, 어머니는 이귀(李貴)의 딸이다.
1651년(효종 2) 별시 문과에 병과로 급제하였다.
1653년에는 정언(正言), 이듬해 지평(持平)이 되었다. 1658년 사서(司書), 1661년(현종 2) 헌납(獻納), 1664년 장령(掌令)을 역임하고, 이어서 집의(執義)를 거쳐 1672년 좌승지, 1675년 강원도관찰사를 지내고, 1677년 동지부사로 청나라에 다녀왔다. 1680년 황해도관찰사가 되었다.
1682년 도승지·예조참판·동지의금부사를 차례로 지내고, 1683년 경기도관찰사, 1684년 개성유수, 1686년 한성부판윤·형조판서를 역임하였다. 어려서부터 시문을 잘하기로 이름났고, 당쟁을 염려하여 이를 극력 피하려 하였으며, 언행이 단정하였다. 시호는 정목(貞穆)이다.